uva 10976 分数拆分

来源:互联网 发布:2000年代流行网络歌曲 编辑:程序博客网 时间:2024/05/17 02:30

很水的一道数学题 , 就当练练手了 , 输入正整数k,找到所有正整数x>=y,

使得1/k = 1/x + 1/y 

问题分析 :

由于x>=y 即1/x<=1/y ,  于是选择枚举比较小的y , y<=2k , 只需要在2k范围内枚举y即可,

用y k 表示 x 即可

 

#include <iostream>

#include <cstdio>
using namespace std;
int main(void)
{
int k,x,y,court;
while(scanf("%d",&k)!=EOF && k){
court = 0 ;
for(y=k+1 ; y<=2*k ; y++){
if( (y*k)%(y-k)==0 ){
x = (y*k)/(y-k);
if(x>=y) court ++ ;
}
}
printf("%d\n",court);
for(y=k+1 ; y<=2*k ; y++){
if( (y*k)%(y-k)==0 ){
x = (y*k)/(y-k);
if(x>=y) printf("1/%d = 1/%d + 1/%d\n",k,x,y);
}
}

}
return 0;
 } 
原创粉丝点击