UVA 10976 数论 枚举
2017-08-22 17:45
239 查看
#include <iostream> using namespace std; int X[1000],Y[1000]; int main() { freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout); int k,x,y; while(cin>>k) { int max=2*k,sum=0; for(y=k+1;y<=max;y++) { if(k*y%(y-k)==0) { x=k*y/(y-k); X[sum]=x; Y[sum]=y; sum++; } } cout<<sum<<endl; for(int i=0;i<sum;i++)printf("1/%d = 1/%d + 1/%d\n",k,X[i],Y[i]); } return 0; }
这个题的思路,枚举y,通过y求x,看x是否满足条件
假设x=y,可以得到k=2y,又因为x>=y,所以y的上限为2k,下限暂定为2
假设y已知,通过1/k=1/x+1/y可以得到x=k*y/(y-k),只要x是正整数就可以,观察式子分母必须大于0,所以y>k,所以y的下限为k+1
坑来了,如果检查x=k*y/(y-k)是否为正整数,有除法,很容易出现精度问题,肯定WA,所以先判断k*y%(y-k)==0,如果余数为0,说明能整除,即x是个整数,就可以了。
最后,题目要求先输出答案个数,所以枚举的时候统计一下,算出x,y之后存到XY两个大数组里,最后遍历数组输出(我看有人算了两遍......)
相关文章推荐
- UVA 10976 分数拆分(数论+枚举)
- uva 11752 - The Super Powers(数论+枚举技巧)
- UVA - 10976(又一枚举水题)
- uva 12716 GCD XOR (数论)枚举技巧(筛法) + 思维
- UVA 10976 枚举
- (暴力枚举) UVa 10976 Fractions Again?!
- UVA 10976 Fractions Again?(枚举+数学)
- Uva 12716-GCD XOR(数论,枚举,xor)
- (UVA - 10976)Fractions Again?!(技巧,暴力枚举)
- 7_3 分数拆分(UVa10976)<缩小枚举范围>
- UVa 10976 Fractions Again 枚举
- uva 12119 - The Bells are Ringing(数论+枚举)
- UVA.12716 GCD XOR (暴力枚举 数论GCD)
- UVA 617 - Nonstop Travel(数论+暴力枚举)
- UVa 10976----Fractions Again?!(枚举)
- UVa10976-Fractions Again?!(枚举)
- UVA10976摸鱼的暴力枚举初步.....
- UVA 617 - Nonstop Travel(数论+暴力枚举)
- UVA12716 GCD等于XOR 数论 枚举
- UVa - 10976 - Fractions Again?!(暴力求解枚举)