分数拆分(Fractions Again?1,UVa 10976)

来源:互联网 发布:手机游戏直播软件 编辑:程序博客网 时间:2024/04/30 05:52

题意:输入正整数k,找到所有的正整数x >= y,使得 1/k = 1/x + 1/y。


分析:由已知关系x >= y -> 1/x <= 1/y,联立题目公式可得1/k - 1/y <= 1/y

即y <= 2k。由此可知只需在k+1 - 2k内枚举y即可。

#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#include<vector>#include<string>#include<map>#include<sstream>#include<queue>#include<cctype>using namespace std;#define MAX 17typedef  long long ll;int a[10000],b[10000],n,s;void ok(int k,int y) {        if(k * y % (y - k) != 0) return;        a[s] = k * y / (y - k);        b[s] = y;        s++;}int main() {        int cas = 1;        while(~scanf("%d",&n) && n) {            s = 0;            for(int y=n+1;y<=2*n;y++)            ok(n,y);            printf("%d\n",s);            for(int i=0;i<s;i++)                printf("1/%d = 1/%d + 1/%d\n",n,a[i],b[i]);        }        return 0;}

0 0