日期:2014-05-20  浏览次数:20796 次

C# 算法题
求两个自然数,其和是667,最小公倍数与最大公约数之比是120:1。

(例如:115,552)

-------------------------

我得出的答案是115,552,232,435。

但是觉得自己的算法很繁琐,没有效率。

请问各位有简单一点的算法算这到题吗?

------解决方案--------------------
首先对667进行因式分解,

667=1*23*29

所以,最小公约数只能是1,23,29三个数其中一个...

于是...循环三次就行了...



------解决方案--------------------
设最大公约数为x, 则最小公倍数是120x. 那么两数的积为120x^2,又已知两数的和为667

设其中一个数为ax,则另外一个数为(120x/a)

ax+(120x/a) = 667
a + 120/a = 667/x

667进行因数分解得到x只能是 1,23,29其中一个.

循环3次:
1: 1+120/a = 667 无解
23: a +120/a = 29 a = 5
29: a + 120/a = 23 a = 8

然后代入a计算得到上面楼主的结果.
------解决方案--------------------
i和(Sum / i)是667的所有质因数的范围。
...
i * (Sum / i) = Sum