Sage 米勒-拉宾素性检验
我想用SAGE编写Miller-Rabin素性测试。这是我的密码:Sage 米勒-拉宾素性检验,sage,primality-test,Sage,Primality Test,我想用SAGE编写Miller-Rabin素性测试。这是我的密码: def miller(n,k): i=1 s=(n-1).valuation(2) t=(n-1)/(2**s) while(i>0 and i<=k): a=randint(3,n-3) if gcd(a,n)!=1: i=0 else: y=a**t%n if y!=1 and y!=n-1: j=1
def miller(n,k):
i=1
s=(n-1).valuation(2)
t=(n-1)/(2**s)
while(i>0 and i<=k):
a=randint(3,n-3)
if gcd(a,n)!=1:
i=0
else:
y=a**t%n
if y!=1 and y!=n-1:
j=1
while(j>0 and j<=s-1 and y!=n-1):
y=y**2%n
if y==1:
j=0
else:
j=j+1
if y!=n-1:
i=0
if i>0:
i=i+1
if i==0:
print "n composite"
else:
print "n probably prime"
def miller(n,k):
i=1
s=(n-1).估值(2)
t=(n-1)/(2**s)
而(i>0,i0和j0:
i=i+1
如果i==0:
打印“n复合”
其他:
打印“n可能是素数”
它适用于不太小的数字,但是适用于n=3847982374893247238947238473289472348784923748723483732748923748932473237239423894782394479273“指数必须最多为9223372036854775807”。我希望得到任何建议:)您可能想用
mod(x,z)^y
之类的模式替换模式x^y%z
,所以你在模约化后进行幂运算(即更小的值)。是的,这绝对是个问题。简单地替换为y=mod(a,n)^t
就产生了n可能素数
:请参见。您可能希望将模式x^y%z
替换为类似mod(x,z)^y
的模式,因此在模化后进行幂运算(即更小的值)。是的,这肯定是一个问题。简单地替换为y=mod(a,n)^tn可能是prime
:请参阅。