Python 3.x 如何加速验证素数的python程序?

Python 3.x 如何加速验证素数的python程序?,python-3.x,calculation,Python 3.x,Calculation,我编写了这个简单的Python3.7代码来验证素数,但是我看到了长度超过10位数的瓶颈。我知道这很弱,但我认为在您的帮助下,这段代码还是有希望的 是否可以加速该程序,使其运行超快 该程序声明复合数为False,素数为True。例如,这个数字(1235468711)需要16秒来报告False,它等于一个复合数字 顺便说一下,(a)必须保持该状态,代码才能工作 我尝试过压缩映射,但没有发现速度增强 代码如下: p=int(输入('输入一个素数,如果为True,则输入其素数:')) def基本参数(*

我编写了这个简单的Python3.7代码来验证素数,但是我看到了长度超过10位数的瓶颈。我知道这很弱,但我认为在您的帮助下,这段代码还是有希望的

是否可以加速该程序,使其运行超快

该程序声明复合数为False,素数为True。例如,这个数字(1235468711)需要16秒来报告False,它等于一个复合数字

顺便说一下,(a)必须保持该状态,代码才能工作

我尝试过压缩映射,但没有发现速度增强

代码如下:

p=int(输入('输入一个素数,如果为True,则输入其素数:'))
def基本参数(*kwargs):
我在夸尔格:
产量一
k=(2*p)
a=素数((2**(p+1)-1)%k)
对于我来说,在一个:
如果i==3:
打印(i不是False,“|如果真数是素数!”)
其他:
打印(False,“|如果False数字不是素数!”)

此伪素数素性测试的问题在于:

a = prime(((2**(((((p+1)))))-1))%k)
因为它只需要计算一个昂贵的幂,然后取它的模

然而,Python确实提供了,它可以像计算pow(a,b,c)那样更有效地计算
a**b%c

在您的情况下,这与您周围有一个额外的
-1
的公式不完全相同。由于
(a**b-1)%c
通常不同于
a**b%c-1
,因此您需要一些额外的计算来重现完全相同的公式。例如,如果,您可以使用额外的
,即:

x = pow(a, b, c)
x += -1 if x > 0 else c - 1
或添加额外的模数运算:

(pow(a, b, c) - 1) % c
为了给您提供一些基准测试,在我的机器上,我观察到建议的方法有+200倍的加速:

p = 123456

print(((2**(((((p+1)))))-1))%(2 * p))
# 127999
print((pow(2, p + 1, 2 * p) - 1) % (2 * p))
# 127999

%timeit ((2**(((((p+1)))))-1))%(2 * p)
# 1000 loops, best of 3: 466 µs per loop
%timeit (pow(2, p + 1, 2 * p) - 1) % (2 * p)
# 1000000 loops, best of 3: 1.75 µs per loop

请注意,还有更有效的方法。

我假设您知道这是一个,例如341,将被错误地报告为素数?行
I不是False
无效语法吗?在任何情况下,都应该只写
i
。你能解释一下你是如何测试素数的吗?我不理解你的代码。请参阅各种实现。@Alexander,我只是在编码时处理数字时遇到了这个问题。这是一个2^n-1的外拍,有一个扭曲,你可以看到2^p+1和-1 mod 2*p@Kent,感谢您指出341似乎是一个令人讨厌的组合!