poj 1183 反正切函数的应用

#include<iostream>        // 2^31-1< 60000^2 <2^32-1,所以要用到unsigned int(unsigned long也行),用long long竟然TLE
using namespace std;
int main()
{
unsigned
int m,n,a,sum;
while(scanf("%d",&a)!=EOF)
{
for(m=a; ;m++)
if((a*a+1)%m==0)
break;
n
=(a*a+1)/m;
sum
=2*a+m+n;
printf(
"%d\n",sum);
}
return 0;
}
////a=(bc-1)/(b+c), 可以证明 b,c>a,所以令b=a+m,c=a+n,代入式子a=(bc-1)/(b+c),解得m*n=a^2+1
////b+c=2a+m+n=2a+m+(a^2+1)/m, 转换成求m+(a^2+1)/m, 的最小值, for(m=a+1; ;m++) 如果(a*a+1)%m==0 则取得最小值

  

posted on 2011-07-22 16:14  sysu_mjc  阅读(201)  评论(0编辑  收藏  举报

导航