锁定老帖子 主题:会求100的质数,给8000
精华帖 (0) :: 良好帖 (0) :: 新手帖 (5) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-04-14
呵呵 我也来一个 之前看别人的
def genprimes(max): numbers = range(2,max+1) while numbers: yield numbers[0] numbers = filter(lambda x: x % numbers[0],numbers[1:]) for x in genprimes(100): print x |
|
返回顶楼 | |
发表时间:2011-04-14
def prime(n):
pr=[2,3] x=pr[-1]+2 while pr[-1] < n: notPrime=0 for t in pr: if x%t==0: notPrime=1 break if notPrime==0: pr.append(x) x=pr[-1]+2 else: x+=2 return pr if __name__=='__main__': from timeit import Timer t = Timer("prime(100)", "from __main__ import prime") print t.timeit(10000) D:\E1>prime.py 1.21051040751 D:\E1>prime.py 1.67069423318 D:\E1>prime.py 0.722572152219 |
|
返回顶楼 | |
发表时间:2011-04-15
别把小学学的给忘了啊!!
数 1 既不是质数也不是合数。 数 2 是偶数,也是质数,是唯一的是偶质数。 PS:质数也叫素数。 O(∩_∩)O~ |
|
返回顶楼 | |
发表时间:2011-04-15
每次不用把所有的数都除一遍,只要除一下已知的素数就行了,可以这样:
primes = [] for n in range(2, 101): for i in primes: if n % i == 0: break elif i ** 2 > n: primes.append(n) break else: primes.append(n) print primes |
|
返回顶楼 | |
发表时间:2011-04-15
public class Test{
public static void main(String args[]){ for(int i=1;i<=100;i++){ if(isZhiShu(i)){ System.out.println(i); } } } public static boolean isZhiShu(int i){ if(i==1)return false; for(int k=2;k<=i/2;k++){ if((i%k)==0)return false; } return true; } } |
|
返回顶楼 | |
发表时间:2011-04-15
查了一下:
质数又称素数。指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。换句话说,只有两个正因数(1和自己)的自然数即为素数。比1大但不是素数的数称为合数。1和0既非素数也非合数。素数在数论中有着很重要的地位。 还和自己的想的不一样 |
|
返回顶楼 | |
发表时间:2011-04-15
Fermat number 。虽然有bug,但是100内没有问题,估计是毫秒级的
|
|
返回顶楼 | |
发表时间:2011-04-16
1不是质数。。。。。
|
|
返回顶楼 | |
发表时间:2011-04-16
晨曦0911 写道 from math import sqrt
result = [ i for i in range(2, 100) if 0 not in [ i% d for d in range(2, int(sqrt(i))+1)] ] print result 这才是 python的方式吧 |
|
返回顶楼 | |
发表时间:2011-04-18
进来看了看,程序事小,楼主的最后那段话,使我受益了。不枉点进来看看,特地mark之
|
|
返回顶楼 | |