- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我得到了一个整数列表(最多 1000),它们乘以给定的整数 n
。
我需要在整数 n
的所有约数中找到最高的幂。
例如:4,7,8 乘以 224,然后最高次方为 5,因为 224=2^2*7*2^3=2^5*7。
问题是,1000 个整数可以大到 2^64,因此 n
非常大。
解决这个问题的好算法是什么?
最佳答案
很难。我会先开始检查小素数(在你的例子中:4、7、8。乘积有一个因子 2^5。你除以 2 的幂,剩下 1、7、1。然后你对 3 做同样的事情, 5, 7 等直到 X)。
现在您需要找到一个更大的素数 p > X,其幂次高于您找到的最高素数。花大量时间寻找只出现一次的主要因素似乎很浪费。您需要作为多个数因数的素数。计算每对数字的 gcd 并查看这些数字的质因数。有很多细节需要解决,这就是为什么我从“困难”开始。
最坏的情况是您无法轻易找到任何出现两次的素数,因此您需要检查每个数字是否包含素数的平方作为因子。
举个例子:你检查了 1000 以内的因数,你发现素数的最高次方是 83^3。所以现在你需要找到一个更大的素数,它是四次方或者证明没有。计算成对的 gcd(最大公约数)。一个大素数可以是来自四个不同数字的这些 gcd 的倍数的除数,或者 p 可以是三个 gcd 的因数,p^2 是一个数的因数等。
阐明原理:假设你有两个巨大的数字x和y,你想知道哪个是素数的最大幂来整除xy。你可以分解 x 和 y 然后从那里开始。如果它们都是质数或两个大质数的乘积,比如 x = p 或 pq,并且 y = r 或 rs,这需要很长时间。
现在计算 x 和 y 的 gcd。如果最大公约数为 z > 1,则 z 是 x 和 y 的因数,因此 z^2 是 xy 的因数。如果最大公约数为 1,则 x 和 y 没有公因数。因为我们不需要非平方因子,所以我们寻找平方和更高的因子。为此,您只需要除以 x^(1/3) 或 y^(1/3) 的因数。
关于c++ - 除数算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40331188/
我遇到了一个问题,想要了解更多信息以及如何避免。我有这个代码 len :: (Num r ) => [a] -> r len [] = 0 len xs = 1 + len ( tail xs ) a
我知道如何找到给定整数(1 除外)的除数: let smallest_divisor n = let rec aux n i = if i 编辑添加:在平均情况下,第二种方法
这个问题已经有答案了: Why does integer division code give the wrong answer? [duplicate] (4 个回答) 已关闭去年。 在 Java
Welcome to Scala version 2.9.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_26). scala> 1.0 / Doub
我的数据帧结构如下,x_L 和 x_R 对的数量可能最多为 100。 ID Side A_L A_R B_L B_R 1 0 7 5 6 3 2
我的数据帧结构如下,x_L 和 x_R 对的数量可能最多为 100。 ID Side A_L A_R B_L B_R 1 0 7 5 6 3 2
如何使用转换将数字列表除以 2?我以为这段代码可以做到,但它只将整个列表的数字 1 除以 2,所以我一定完全误解了这一点。有人能帮助我吗? :) list v(5, 1); list d; d.res
我目前正在研究如何使用各种现代处理器的快速单精度浮点倒数功能来计算基于定点 Newton-Raphson 迭代的 64 位无符号整数除法的起始近似值。它需要尽可能准确地计算 264/除数,其中初始近似
我是一名优秀的程序员,十分优秀!