检验质数

检验质数的几个算法,按照算法设计与分析上面的实现的。

#!/usr/bin/python

import random
import math

def exmod(a,m,n):
	abin =bin(m)
	#print abin
	lec = len(abin)
	c = 1
	for j in range(2,lec):
		c = (c*c)%n
		if (abin[j] == '1'):
			c = (a*c)%n
	return c

def ptest1(x):
	if(exmod(2,x-1,x)%x == 1):
		return "yes"
	else:
		return "no"


def ptest2(x):
	a = random.randint(2,x-2);
	if(exmod(a,x-1,x)%x == 1):
		return "yes"
	else:
		return "no"
def primalitytest(x):
	q = 0
	m = x-1
	k = int(math.ceil(math.log(x,2)))
	while m%2 == 0:
		m = int(math.floor(m/2))
		q = q+1
	#print q
	#print m
	for i in range(1,k):
		a = random.randint(2,x-2)
		t = exmod(a,m,x)
		if(t == 0) :
			return "yes"
		for j in range(0,q-1):
			if(t% x == -1 %x):
				return "yes"
			t = (t*t)%x
	return "no"


#print exmod(2,10,12)
#print ptest1(93961)
#print ptest2(93961)
print primalitytest(53)





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值