首页 > 代码库 > 分数拆分

分数拆分

                                                                                                     分数拆分
题目描述
输入正整数k,找到所有的正整数x>=y,使得1/k=1/x+1/y


输入
输入包括多行,每行一个正整数k,1<=k<=100000


输出
输出所有成立的分数式,按x从大到小的顺序


样例输入
2
12
样例输出
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

#include<iostream>
#define MAX 300000
usingnamespace std;
intmain()
{
    intk;
    floatc;
    while(cin>>k)
    {
        for(inti=k+1;i<=2*k;i++)      //y
            {
                c=(float)i*k/(i-k);
                intx=c;
                if(x==c&&x>0)
                    cout<<1<<‘/‘<<k<<‘=‘<<1<<‘/‘<<x<<‘+‘<<1<<‘/‘<<i<<endl;
            }
    }
 
}
这个题目即使根据x,y,k满足关系式可以判断出y大于k小于2k,同时x大于2k,

再通过先运算方式,就可以缩小穷举范围

同时需要考虑整型和浮点型的关系,直接做/法便会丢解