【问题标题】:how to find gcd of all permutations of a large number of order 10^250?如何找到大量10 ^ 250阶的所有排列的gcd?
【发布时间】:2015-09-07 18:18:55
【问题描述】:

考虑自然数 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

但我每次都得到错误的答案。

【问题讨论】:

  • 链接不应该在标题中:(你必须在你自己的问题中给出问题的简历。
  • 对不起..我的第一个问题。
  • 我也见过stackoverflow.com/questions/25698691/… ...那里的答案不完整。
  • 我想你会想找到一种方法来迭代值的范围。您需要使用欧几里得算法并使用模算术测试可除性。
  • 考虑 3699。所有排列的 gcd 为 27。您的算法返回 9 (k=9, o=1)。

标签: algorithm math recursion permutation


【解决方案1】:

让我想想……

例如,如果您的大数包含数字 2 和 3,那么一个排列以 23 结尾,另一个排列相同,只是它以 32 结尾。差是 9。因此所有排列的 gcd 是 9 的因数,表示它是 9、3 或 1。

你能从那里去吗?

【讨论】:

  • 我也试过了......关于其他因素 7,5 的更多提示......因为 111118 可以被 7 整除,但它的数字不可整除。
  • 我希望我的伪代码被忽略或出错。
  • 我看不出你的伪代码有任何理由。你必须从数学开始。
【解决方案2】:

给你一个更强有力的提示:x 和 y 的每个公约数也是 x-y 的一个因数。这就是为什么您不需要找到 250 位数字的所有除数的原因。您会找到这些数字的 一些 差异的除数。

如果您的号码中有两个数字 5 和 7(因为这是您所要求的),则存在一个排列(248 位)57 和另一个排列(相同的 248 位)75。差是18。所有数字的gcd除以18。

现在轮到你了。如果你有两个数字 2 和 9,通过一个以 29 结尾的排列和一个以 92 结尾的排列,你能得出什么结论?如果你有两个以上不同的数字,你能得出什么结论?

【讨论】:

  • 你为什么两次发布基本相同的答案?
  • 两个不同数字 a 和 b 的结论是:gcd 除以 9(abs(b-a))..不知道是否 3 个不同的数字:\
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-04
  • 2011-11-19
  • 1970-01-01
相关资源
最近更新 更多