考虑自然数N的十进制表示。找到可以通过置换给定数字中的数字而获得的所有数字的最大公约数(GCD)。允许前导零
我不想要代码,只是关于如何解决问题的逻辑 http://www.spoj.com/problems/GCD/
这是我正在尝试的伪代码:
if sum of digits divide by 3 then k=3
if sum of digits divide by 9 then k=9
else k=1
if all digits divide by 2 then o=2
if all digits divide by 4 then o=4
if all digits divide by 8 then o=8
if all digits divide by 5 then o=5
if all digits divide by 7 then o=7
else o=1
if all digits are same , print itself
else print o*k
但我每次都会得到错误的答案。
答案 0 :(得分:0)
让我想想......
例如,如果你的大数字包含数字2和3,那么一个排列结束于23,另一个排列是相同的,除了它以32结尾。差异是9.因此所有排列的gcd是9的因子,这意味着它是9,3或1.
你能从那里出发吗?答案 1 :(得分:0)
为了给你一个更强的暗示:x和y的每个公约数也是x-y的除数。这就是为什么你不需要找到所有250位数的除数。你会发现这些数字的某些差异的除数。
如果您的号码中有两个数字5和7(因为这就是您的要求),则有一个排列(248位)57和另一个排列(相同的248位)75。差异是18.所有数字的gcd除以18。
现在轮到你了。如果你有两个数字2和9,你可以得出什么结论,其中一个排列结束于29,一个结束于92?如果你有两个以上不同的数字,你能得出什么结论?