- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
Lucas-Lehmer primality test测试质数以确定它们是否也是 Mersenne primes .瓶颈之一是计算 (s**2 − 2) % (2**p - 1)
时的模运算。
使用按位运算可以大大加快速度(参见 L-L 链接),目前为止我最好的是:
def mod(n,p):
""" Returns the value of (s**2 - 2) % (2**p -1)"""
Mp = (1<<p) - 1
while n.bit_length() > p: # For Python < 2.7 use len(bin(n)) - 2 > p
n = (n & Mp) + (n >> p)
if n == Mp:
return 0
else:
return n
一个简单的测试用例是 p
有 5-9 个数字,s
有 10,000 多个数字(或更多;它们是什么并不重要)。解决方案可以通过 mod((s**2 - 2), p) == (s**2 - 2) % (2**p -1)
进行测试。请记住,在 L-L 测试中需要此模运算的 p - 2 次迭代,每次迭代都以指数方式增加 s
,因此需要优化。
有没有办法使用纯 Python(包括 Python 3)进一步加快速度?有没有更好的办法?
最佳答案
我能找到的最好的改进是删除 Mp = (1<<p) - 1
完全来自模函数,并在开始 L-L 测试的迭代之前在 L-L 函数中预先计算它。使用 while n > Mp:
而不是 while n.bit_length() > p:
也节省了一些时间。
关于python - 用于 Lucas-Lehmer 素数测试的更快的按位模数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5393420/
我一直在努力使用 C# 代码优化 Lucas-Lehmer 素数测试(是的,我正在用 Mersenne 素数做一些事情来计算完美数。我想知道当前代码是否有可能进一步提高速度.我用System.Nume
Lucas-Lehmer primality test测试质数以确定它们是否也是 Mersenne primes .瓶颈之一是计算 (s**2 − 2) % (2**p - 1) 时的模运算。 使用按
在执行我自己的 BigInteger 实现时,我遇到了扩展 GCD 算法,该算法是查找模乘逆的基础。由于众所周知的欧几里德方法执行速度太慢,而混合和二进制算法仅快 5-10 倍,因此选择了 Lehme
我目前正在编写一个 C++ 程序来查找 Mersenne 素数,利用 MS Win8.1 上的 ttmath api。我已经编写了 Lucas-Lehmer 算法,但无论我尝试什么值,我总是得到一条无
我尝试对 Mersenne 数 ( https://en.wikipedia.org/wiki/Lucas%E2%80%93Lehmer_primality_test ) 实现 Lucas–Lehme
这是代码,其中limit = 8: #include #include // pow(x, exp) //---------------------------------------------
我是一名优秀的程序员,十分优秀!