POJ 1183 反正切函数的应用(数论)
2015-06-20 19:10
204 查看
Description
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 的值。
Sample Input
1
Sample Output
5
Solution
1/a = (1/b + 1/c)/ (1 - 1/(b*c))
=> bc-1 = a(b+c)
假设b=a+m,c=a+n (b和c永远比a大)
(a+m)(a+n)-1=a(a+m+a+n)
=> a*a+a*n+a*m+m*n-1=2*a*a+m*a+n*a
=> m*n=a*a+1
故对m从a到1枚举,只要a*a+1|m即满足条件
Code
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 的值。
Sample Input
1
Sample Output
5
Solution
1/a = (1/b + 1/c)/ (1 - 1/(b*c))
=> bc-1 = a(b+c)
假设b=a+m,c=a+n (b和c永远比a大)
(a+m)(a+n)-1=a(a+m+a+n)
=> a*a+a*n+a*m+m*n-1=2*a*a+m*a+n*a
=> m*n=a*a+1
故对m从a到1枚举,只要a*a+1|m即满足条件
Code
#include<stdio.h> typedef long long ll; int main() { ll a,m,ans; while(scanf("%lld",&a)!=EOF) { for(m=a;m>=1;m--) { if((a*a+1)%m==0) break; } ans=(a*a+1)/m+m+2*a;//b+c的值 printf("%lld\n",ans); } return 0; }
相关文章推荐
- 2015年大一下第15周项目1-平方根中的异常
- 斯坦福大学 iOS 7应用开发 ppt
- opencv 在 ubuntu14.04 中的配置和测试
- awk关系操作符
- 迈克尔杰克逊
- 黑马程序员——Java基础---面向对象(继承、多态、抽象类、接口、内部类)
- hdoj 1426 Sudoku Killer 【DFS经典题目】
- 剑指offer35:第一个只出现一次的字符(hash表使用)
- 的微信公众号开发 图灵机器人接口允许调用自己的微通道成为一个智能机器人
- linux 文件I/O 入门
- typedef和define的一些区别
- Python性能(转)
- windows 远程 ubuntu
- Android数据库ORMlite框架翻译系列(第二章:part 3)
- [原创]Ubuntu 14.04安装搜狗输入法
- 如何搭建.NET Entity Framework分布式应用系统框架
- Android数据库ORMlite框架翻译系列(第二章:part 2)
- 欢迎使用CSDN-markdown编辑器
- iOS项目开发优秀文章汇总
- Thrift compiler代码生成类解析