Description
松哥寒假回家帮他的外甥女做寒假作业,有一道题目是这样的,有一个表达式1/k=1/x+1/y.
其中x>=y.松哥想知道对于已知的k,所有满足条件的表达式有哪些,请从小到大列出它们.
Input
多组测试数据。每组测试数据包含一个正整数k(k<=5000).
Output
对于每组测试数据输出所有的表达式,若表达式不存在,则输出-1.
Sample Input
2
12
Sample Output
1/2=1/6+1/3
1/2=1/4+1/4
1/12=1/156+1/13
1/12=1/84+1/14
1/12=1/60+1/15
1/12=1/48+1/16
1/12=1/36+1/18
1/12=1/30+1/20
1/12=1/28+1/21
1/12=1/24+1/24
解析:因为y<=x,嘿嘿,我们可以发现y是从 k+1开始递增到2k,也就是说
y∈[k+1,2k]
😁,发现这个就可以开个for遍历y,我们通过数学推导得出
x=k*y/(y-k) ,
x如果是整数 (利用
k*y%(y-k)是否是0来判断
),说明等式存在,输出即可。
#include <stdio.h>
int main()
{
int k,y,s;
while(~scanf("%d",&k)){
s=0;//记录是否存在
for(y=k+1;y<=2*k;y++){ //k*y/(y-k)就是x,((k*y)%(y-k))==0说明x是整数,合法
if(((k*y)%(y-k))==0) printf("1/%d=1/%d+1/%d\n",k,k*y/(y-k),y),s=1;
}
if(s==0) printf("-1\n");//不存在输出-1
}
return 0;
}