POJ 1183 反正切函数的应用

H - 反正切函数的应用

Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u

Submit Status

Description

反正切函数可展开成无穷级数,有如下公式

(其中0 <= x <= 1) 公式(1)

使用反正切函数计算PI是一种常用的方法。例如,最简单的计算PI的方法:

PI=4arctan(1)=4(1-1/3+1/5-1/7+1/9-1/11+...) 公式(2)

然而,这种方法的效率很低,但我们可以根据角度和的正切函数公式:

tan(a+b)=[tan(a)+tan(b)]/[1-tan(a)*tan(b)] 公式(3)

通过简单的变换得到:

arctan(p)+arctan(q)=arctan[(p+q)/(1-pq)] 公式(4)

利用这个公式,令p=1/2,q=1/3,则(p+q)/(1-pq)=1,有

arctan(1/2)+arctan(1/3)=arctan[(1/2+1/3)/(1-1/2*1/3)]=arctan(1)

使用1/2和1/3的反正切来计算arctan(1),速度就快多了。

我们将公式(4)写成如下形式

arctan(1/a)=arctan(1/b)+arctan(1/c)

其中a,b和c均为正整数。

我们的问题是:对于每一个给定的a(1 <= a <= 60000),求b+c的值。我们保证对于任意的a都存在整数解。如果有多个解,要求你给出b+c最小的解。

Input

输入文件中只有一个正整数a,其中 1 <= a <= 60000。

Output

输出文件中只有一个整数,为 b+c 的值。

算法分体:就是推导,推到极其复杂啊!

代码:

#include <stdio.h>
#include <string.h>

int main()
{
	long long a, m, n, dd;
	while(scanf("%lld", &a)!=EOF)
	{
	dd=a*a+1;

	for(m=a; m>=1; m--)
	{
		if(dd%m==0)
		{
			break;
		}
	}
	n=dd/m;
	printf("%ld\n", 2*a+m+n );
	}
	return 0;
}

这是一位同胞的解释!可供参考!

POJ 1183 反正切函数的应用,布布扣,bubuko.com

时间: 2024-11-23 07:50:51

POJ 1183 反正切函数的应用的相关文章

POJ 1183 反正切函数的应用(数学代换,基本不等式)

题目链接:http://poj.org/problem?id=1183 这道题关键在于数学式子的推导,由题目有1/a=(1/b+1/c)/(1-1/(b*c))---------->a=(b*c-1)/(b+c). 要求b+c的最小值,利用数学中的总体思想.令y=b+c.推导出ay=by-b^2-1. 再令t=b-a,得到了y=t+(a^2+1)/t+2a. 求y的最小值,非常easy想到数学中的基本不等式,x+a/x>=2根a.当x=a/x时取等号. 可是对于本题sqrt(a*a+1)不一定

POJ 1183 反正切函数的应用 (推公式)

反正切函数的应用 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 14468   Accepted: 5227 Description 反正切函数可展开成无穷级数,有如下公式 (其中0 <= x <= 1) 公式(1) 使用反正切函数计算PI是一种常用的方法.例如,最简单的计算PI的方法: PI=4arctan(1)=4(1-1/3+1/5-1/7+1/9-1/11+...) 公式(2) 然而,这种方法的效率很低,但我们

Poj 4227 反正切函数的应用

Description 反正切函数可展开成无穷级数.有例如以下公式 (当中0 <= x <= 1) 公式(1) 使用反正切函数计算PI是一种经常使用的方法.比如,最简单的计算PI的方法: PI=4arctan(1)=4(1-1/3+1/5-1/7+1/9-1/11+...) 公式(2) 然而.这样的方法的效率非常低.但我们能够依据角度和的正切函数公式: tan(a+b)=[tan(a)+tan(b)]/[1-tan(a)*tan(b)] 公式(3) 通过简单的变换得到: arctan(p)+a

POJ 1183

#include<iostream> #include<stdio.h> using namespace std; int main() { //freopen("acm.acm","r",stdin); unsigned long a; unsigned long m; unsigned long n; unsigned long tem; cin>>a; tem = a*a + 1; for(m = a; m>=1 ;

ACM训练方案-POJ题目分类

ACM训练方案-POJ题目分类 博客分类: 算法 ACM online Judge 中国: 浙江大学(ZJU):http://acm.zju.edu.cn/ 北京大学(PKU):http://acm.pku.edu.cn/JudgeOnline/ 杭州电子科技大学(HDU):http://acm.hdu.edu.cn/ 中国科技大学(USTC):http://acm.ustc.edu.cn/ 北京航天航空大学(BUAA)http://acm.buaa.edu.cn/oj/index.php 南京

转载:poj题目分类(侵删)

转载:from: POJ:http://blog.csdn.net/qq_28236309/article/details/47818407 按照ac的代码长度分类(主要参考最短代码和自己写的代码) 短代码:0.01K–0.50K:中短代码:0.51K–1.00K:中等代码量:1.01K–2.00K:长代码:2.01K以上. 短:1147.1163.1922.2211.2215.2229.2232.2234.2242.2245.2262.2301.2309.2313.2334.2346.2348

poj题库分类

初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推.     (5)构造法.(poj3295)     (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)二.图算法:     (1)图的深度优先遍历和广度优先遍历.     (2)最短路径算法(dijkstra,bellman-ford,floyd,hea

POJ题目(转)

http://www.cnblogs.com/kuangbin/archive/2011/07/29/2120667.html 初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推.     (5)构造法.(poj3295)     (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)二.图算法:     (

Poj 题目分类

初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推.     (5)构造法.(poj3295)     (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)二.图算法:     (1)图的深度优先遍历和广度优先遍历.     (2)最短路径算法(dijkstra,bellman-ford,floyd,hea