判断素数系列

判断素数:检查一个正整数N是否为素数,最简单的方法就是试除法,将该数N用小于等于根号N的所有素数去试除,若均无法整除,N则为素数
[python]  view plain  copy
  1. def isprime(n):  
  2.     for i in range(2,(int(n**0.5))+1):  
  3.         if n % i == 0:  
  4.             return False  
  5.     return True  

高效率办法:

减少 除数n 的选取个数就行了。
比如 n = 4,既然4 能被 2 整除,也就是说 一个连2都无法整除的数,也无法被4整除,该直接使用5(素数,作为素数无法被整除,且所有的 合数都能被 素数表示)。因此我们使用 素数作为除数可以极大提高效率。另外选择的素数也不能大于被除数,因为无法 大数整除小数。
因此采用 素数数组作为除数是一种高效的选择。

无限制判断素数程序:

[python]  view plain  copy
  1. #python 3.4.1  
  2. import math  
  3. def oddgen(n):  
  4.     while True:  
  5.         yield n  
  6.         n += 2  
  7. def isprime(n):  
  8.     for i in range(2,int(n**0.5)+1):  
  9.         if n % i == 0:  
  10.             return False  
  11.     return True  
  12. def genpir():  
  13.     yield 2  
  14.     for n in oddgen(3):  
  15.         if isprime(n):  
  16.             yield n  
  17. mygen = genpir()  

可以用下面代码去打印,或者直接在shell里面输入mygen.__next__()
[python]  view plain  copy
  1. print([mygen.__next__() for i in range (50)])  
上面的程序用了生成器


一种高效的打印素数的方法(来自网络):

[python]  view plain  copy
  1. import math  
  2.   
  3. def prime(n):  
  4.     primes = [2]  
  5.     primet = [2]  
  6.     for x in range(3,n+1,2):  
  7.         if primet[-1] ** 2 < x:  
  8.             primet.append(primes[len(primet)])  
  9.         for i in primet:  
  10.             if x % i == 0:  
  11.                 break  
  12.         else:  
  13.             primes.append(x)  
  14.     return primes  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值