分数转换

来源:互联网 发布:java开发工作描述 编辑:程序博客网 时间:2024/05/01 06:26

一、分数转换问题!!


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

样例输入:

2

12

样例输出:

2

1/2 =1/6 +1/3

1/2 =1/4 +1/4

8

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



1/12=1/156+1/13可以看出,x可以比y大很多。由于x>=y,1/x<=1/y,因此1/k-1/y<=1/y,即y<=2*k.这样,只需要在2*k范围之内枚举y,然后根据y尝试计算出x即可。

主要是把约束条件1/k=1/x +1/y,化简,最后可以得到k<=y<=2k,x=ky/(y−k);,




#include<stdio.h>

int main()

{

    int n,k;

    scanf("%d",&n);

    while(n--)

    {

        int x,y;

        scanf("%d",&k);

        for(y=k+1;y<=2*k;y++)

        {

            if(k*y%(y-k)==0)

            {

                x=k*y/(y-k);

                printf("1/%d=1/%d+1/%d\n",k,x,y);

            }

        }

    }

    return0;

}

0 0