Uva 10976 Fractions Again?! (技巧暴力)

来源:互联网 发布:js如何拉起微信 编辑:程序博客网 时间:2024/06/06 17:47

传送门:点击打开交题链接

题意:给你个n,让你求出两个值x,y。让他满足1/n = 1/x + 1/y 其中x >= y.列举出所有成立的x和y

思路:枚举 y ,y的范围是 n 到 2*n。

因为 x <= y 所以1/x <= 1/y

又因为 1/n = 1/x +1 / y

所以 1/n - 1 /y = 1/x

所以 1/n - 1/y <= 1/y

所以 1/n <= 2/y

所以 n >= 2y


上代码:

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int gcd(int a,int b){if(a == 0) return b;else return gcd(b%a,a);}int main(){int n ;while(~scanf("%d",&n)){int a,b;int ans = 0; for(int i = n ; i <= 2*n ;i ++){b = i;int fenzi = b - n;int fenmu = b*n;int T = gcd(fenzi,fenmu);fenzi /= T;fenmu /= T;if(fenzi == 1 && fenmu >= b)  ans++;}printf("%d\n",ans);for(int i = n ; i <= 2*n ;i ++){b = i;int fenzi = b - n;int fenmu = b*n;int T = gcd(fenzi,fenmu);fenzi /= T;fenmu /= T;if(fenzi == 1 && fenmu >= b)  printf("1/%d = 1/%d + 1/%d\n",n,fenmu,b);}}return 0;} 


原创粉丝点击