Description
输入正整数k(k<=1000),将1/k变为不少于2项,但不多于3项的1/(xi)之和,xi为正整数,且i表示序号
注:请使用long long
输入格式
多case,一行一个整数k
最后一行是0
输出格式
对每一个case,按等式最右边一项分母,由小到大排序输出满足条件的等式,最右边一项分母相同,则按最右边第二项,依次类推
每一个case完成后,输出一个空行(没有满足的等式时,也要输出该空行)
#include <iostream>
using namespace std;
int main()
{
long long k,x1,x2,x3,i,j;
while(1)//多case
{
cin >> k;
if(k == 0)
break;
for(i = k+1;i <= 3 * k;i++)//先确定X3的值 k<x3<=3*k
{
for(j = ((i*k)/(i-k)>i)?(i*k)/(i-k):i;j <= 2*k*i/(i-k);j++)//再确定X2的值 注意X2是从满足1/k=1/x2+1/x3的x2的值和x3的值的较大值开始
{
if(j*i==k*i+k*j)//若已经满足1/k=1/x2+1/x3,则输出
{
printf("1/%lld=1/%lld+1/%lld\n",k,j,i);
}
else if((k*i*j)%(i*j-k*i-k*j) == 0&&(i*j-k*i-k*j)>0)
{
x1 = (k*i*j)/(i*j-k*i-k*j);
printf("1/%lld=1/%lld+1/%lld+1/%lld\n",k,x1,j,i);
}
}
}
printf("\n");//每个case结束空行
}
return 0;
}