论坛首页 编程语言技术论坛

会求100的质数,给8000

浏览 23413 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (5) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-04-10   最后修改:2011-04-10
呵呵,不知道这个哥们说的是真是假,http://www.iteye.com/topic/996006?page=2
学python,正好练下手,也花了好几分钟吧,30秒还是太短了点哦
求100以内的质数:
def isPrime(num):
    # all numbers can be divided by 1, so begins with 2
    i = 2
    isPrime = True
    while(i*i <= num):
        # can be divided by i, so is not prime
        if(num % i == 0):
            isPrime = False
            break
        else:
            i += 1
    return isPrime

print( [ i for i in range(1, 100) if isPrime(i)] )


结果:
[1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
   发表时间:2011-04-11   最后修改:2011-04-11
我也凑个热闹,lz严格来说,你求的是1-99的素数,因为range取不到stop那个数

def isPrime(n):
    flag = True
    for i in xrange(2,n-1):
        if not n%i:
            flag = False
            break
    return flag

print([i for i in xrange(1,101) if isPrime(i)])
0 请登录后投票
   发表时间:2011-04-11  
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
1 请登录后投票
   发表时间:2011-04-12  

晨曦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


不错
0 请登录后投票
   发表时间:2011-04-12  
jsj_064 写道

晨曦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


不错


exception: 引入math模块增加了依赖;sqrt速度没i*i快
0 请登录后投票
   发表时间:2011-04-14  
6N+-1法:num=50000,时间:50ms
private static void prime2(int num) {
		long start = System.currentTimeMillis();
		for (int n = 2; n <= 3; n++) {
			System.out.print(n + " ");
		}
		label1: for (int n = 1;; n++) {
			label2: for (int m = 0; m <= 1; m++) {
				int tmp = 2 * (3 * n + m) - 1;
				if (tmp > num)
					break label1;
				for (int k = 2; k * k <= tmp; k++)
					if (tmp % k == 0)
						if (m == 0)
							continue label2;
						else
							continue label1;
				System.out.print(tmp + " ");
			}
		}
		System.out.println();
		System.out.print("时间:");
		long end = System.currentTimeMillis();
		System.out.println(end - start);
	}

0 请登录后投票
   发表时间:2011-04-14  
feitian124 写道
呵呵,不知道这个哥们说的是真是假,http://www.iteye.com/topic/996006?page=2
学python,正好练下手,也花了好几分钟吧,30秒还是太短了点哦
求100以内的质数:
def isPrime(num):
    # all numbers can be divided by 1, so begins with 2
    i = 2
    isPrime = True
    while(i*i <= num):
        # can be divided by i, so is not prime
        if(num % i == 0):
            isPrime = False
            break
        else:
            i += 1
    return isPrime

print( [ i for i in range(1, 100) if isPrime(i)] )


结果:
[1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

大哥,1是质数吗?
0 请登录后投票
   发表时间:2011-04-14  
这哥们数学没学好
0 请登录后投票
   发表时间:2011-04-14   最后修改:2011-04-14
在数学上,1既不是质数也不是和数!
0 请登录后投票
   发表时间:2011-04-14   最后修改:2011-04-14
sdvc 写道
这哥们数学没学好


这哥们一针见血,遥想当年,如果不是数学拉了后腿,我也是高考上600的人了。

发帖前,我确实有想了下是否要做下边界检查,确认下1是不是素数之类,然后不知道什么原因,懒惰,无所谓,总之就最终没有做。这或许就是我平庸的原因了,因为从这个帖子也可以看出,你有缺陷,就必然有人会提出来,就很可能有人会做的更好;而只是比较好,甚至第二,第三名的那个人,通常也比最好那个人成就上差很多。

所以我接受批评,并且改正。

def isPrime(num):
    # 质数必须是自然数,且1不是质数也不是合数
    if(num <= 1):
        return False

    # 只需遍历至num的平方根
    i = 2
    while(i*i <= num):
        if(num % i == 0):
            return False
            break
        else:
            i += 1
    return True

print( [ i for i in range(1, 101) if isPrime(i)] )
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics