【发布时间】:2016-10-30 16:32:11
【问题描述】:
我得到了一个整数列表(最多 1000 个),它们乘以给定的整数 n。
我需要在整数n的所有除数中找到最大的幂。
例如:4,7,8 乘以 224,则最高幂将是 5,因为 224=2^2*7*2^3=2^5*7。
问题是,这 1000 个整数可以大到 2^64,因此n 非常大。
什么是解决这个问题的好算法?
【问题讨论】:
-
这是一个技巧问题。每个整数的最大素因数(包括整数本身,如果它们是素数)将始终与其乘积的最大素因数相同。基础数学。
-
实际上我不是在寻找最大的素数,而是所有素数的最大幂,即最高的 k 使得 d^k 将 n 除以所有 d。它是 max{ k 使得 d^k | n 其中 d 是 n 的除数 }
-
没关系。在计算出每个数字的素数后,您只需要将它们加起来即可。例如,以 4、7 和 8 为例,您得到 2*2、7、2*2*2。你有五个 2,这就是你的答案。您不需要将它们相乘,只需将每个整数单独分解,然后将它们相加即可。基础数学。
-
那么这只不过是一个关于找到一个数的质因数的最有效方法的问题。我敢肯定,这里有很多关于这个主题的问题……在 Google 上搜索“Eratothenes 筛子”。
-
@SamVarshavchik:筛子对于寻找 一个 大数的因数,或找出 1,000 个数到 2^64 的因数是毫无用处的。
标签: c++ algorithm primes factorization