传送门:点击打开交题链接
题意:给你个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;
}