判断一个数是质数的几种方法

质数也叫素数,是只能被1和它本身整除的正整数,最小的质数是2,目前发现的最大的质数是p=2^57885161-1【注1】。
判断一个数是质数的最简单的方法如下:

def isPrime1(n):
for i in range(2, n):
if n % i == 0:
return False
return True

但是在上面的方法中有一些冗余的计算,所以做以下改进

def isPrime2(n):
import math
if n == 1:
return False
elif n < 4:
return True
else:
r = int(math.floor(math.sqrt(n)))
for i in range(2,r+1):
if n % i == 0:
return False
return True

上面的方法对第一种方法做了一些改进,但是还可以再细分一些情况,如下:

def isPrime(n):
import math
if n == 1:
return False
elif n < 4:
return True
elif n & 1 == 0:
return False
elif n < 9:
return True
elif n %3 == 0:
return False
else:
r = math.floor(math.sqrt(n))
f = 5
while f <= r:
if n % f == 0:
return False
if n %(f+2) == 0:
return False
f += 6
return True

判断15485863是否是素数时,三者的运行时间如下:

1.9960000515
0.0139999389648
0.0090000629425


4. 打表法:
可以事先列出M(M为正整数)下的素数表,判断一个数是否为素数时,可以直接在表中查找,这是最快的方法了,但是需要额外的存储空间,是一种用空间换取时间的方法。
下面是列出M以下的所有素数的一种方法。

def primeBelowM(m):
num = [True for i in range(m)]
for i in range(2,m):
k = (m-1)/i
for j in range(2,k+1):
num[j*i] = False
prime = []
for i in range(2,m):
if num[i]:
prime.append(i)
return prime



【注1】 [quote]http://baike.baidu.cn/view/333373.htm[/quote]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值