如何编程解出:1/A+1/B+1/C=17/1998的所有正整数解

wavecheng 2002-01-23 03:20:51
能穷尽所有的吗?

比如126,1998,13986以够大了,但仍然满足
...全文
164 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
congling 2002-01-23
  • 打赏
  • 举报
回复
B的取值应该是2/(17/1998-1/A),还是来一段程序吧!

void EnumValue(Fraction *result)
{
int A,B,Amin,Amax,Bmax;Fraction Fa,Fb,F,Fr;
double value;
Amin=result->denominator/result->numerator;
Amax=3*result->denominator/result->numerator;
Fa.numerator=1;
Fb.numerator=1;
for(A=Amin;A<Amax+1;A++)
{
Fa.denominator=A;
Fr=Fraction_Sub(result,&Fa);
if(Fr.numerator<0) continue;
value=2/Fraction_Value(&Fr);
Bmax=value;
for(B=A;B<=Bmax;B++)
{
Fb.denominator=B;
F=Fraction_Sub(&Fr,&Fb);
if(F.numerator==1)
printf("1/%d+1/%d+1/%d=%d/%d\n",A,B,F.denominator,result->numerator,result->denominator);
}
}
}

main()
{
Fraction result={17,1998};
EnumValue(&result);
}
congling 2002-01-23
  • 打赏
  • 举报
回复
你可以这样做:
1)建立一套分数的加减乘除的运算库
2)由于AB可以确定C,简化A,B的取值范围,可以设定A<=B<=C:
1/A<=17/1998-->A>=1998/17,
3/A>=17/1998-->A<=3*1998/17
118<=A<=352

B的取值范围为1/2*(17/1998-1/A),B的最大值为13806,但是B的降律很高:
B次大值:6903....
然后通过枚举A,B得到结果。



pchaos 2002-01-23
  • 打赏
  • 举报
回复
学习
windindance 2002-01-23
  • 打赏
  • 举报
回复
学习

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧