1. 程式人生 > >uva 10976 分數拆分

uva 10976 分數拆分

很水的一道數學題 , 就當練練手了 , 輸入正整數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;
 }