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