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

会求100的质数,给8000

浏览 23537 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (5) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-04-18  
lx_corn 写道
晨曦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的方式吧


强大的列表解析~

0 请登录后投票
   发表时间:2011-04-20   最后修改:2011-04-20
跟帖,写了个java实现:

	private static void showPrimeNumber(int scope) {
		System.out.println("scope: " + scope);
		if(scope < 2) {
			System.out.println("none");
			return;
		}
		String[] primeArr = null;
		StringBuffer sb = new StringBuffer();
		sb.append("2");
		int currentNum = 3;
		while(currentNum <= scope) {
			boolean isPrime = true;
			primeArr = sb.toString().split(",");
			int length = primeArr.length;
			for(int i = 1; i < length; i++) {
				if(currentNum % Integer.parseInt(primeArr[i]) == 0) {
					isPrime = false;
					break;
				}
			}
			if(isPrime) {
				sb.append("," + currentNum);
			}
			currentNum += 2;
		}
		primeArr = sb.toString().split(",");
		System.out.println("count: " + primeArr.length);
		for(String s : primeArr) {
			System.out.println(s);
		}
	}


说明:特殊判断1,2。只判断奇数,并且只用已经判断出的质数去除,看是否可以整除。
0 请登录后投票
   发表时间:2011-04-25  
n不能够被不大于根号n的任何素数整除,则n是一个素数
10 以内的只是2,3,5,7,所以大于10的只需判断能否被这4个整除就够了。
0 请登录后投票
   发表时间:2011-04-25  
计算机只是帮人做事的,何必非要用square去算100呢?
0 请登录后投票
   发表时间:2011-04-27  
小问一句啊,为什么要用平方,而不用开方或是截半呢
0 请登录后投票
   发表时间:2011-04-28  
import math

count = int(input("Please enter an integer: "))
for i in range(1, count):
    skip = False;
    k = int((math.sqrt(i)) + 1)
    for j in range(2, k):
        if i % j == 0:
            skip = True;
            break
    if not skip:
        print(i)
0 请登录后投票
   发表时间:2011-04-28  
ericwzc 写道
n不能够被不大于根号n的任何素数整除,则n是一个素数
10 以内的只是2,3,5,7,所以大于10的只需判断能否被这4个整除就够了。

这个素数的定义(用概念来验证概念)在数学上有问题吧...
0 请登录后投票
   发表时间:2011-08-17   最后修改:2011-08-17
没有必要太咬文嚼字了吧,只是判定一个数是不是素数,而不是定义什么是素数。
命题: n不能够被不大于根号n的任何素数整除,则n是一个素数
证明: 假设n不是素数,那么n是合数(1就先不用管了 ),n可以被分解成至少2个素数的乘积。  n = a * b * c 。。。, 由于n不能够被不大于根号n的任何素数整除,那么每个素因子都大于根号n. a > 根号n, b > 根号n. 那么ab > n, 这就引起了矛盾,于是假设不成立,原命题成立。

0 请登录后投票
   发表时间:2011-09-27  
对不起  俺不会数学, 只会 copy  修改

下面是官方文档的 例子:
http://docs.python.org/tutorial/controlflow.html#break-and-continue-statements-and-else-clauses-on-loops
>>> for n in range(2, 10):
...     for x in range(2, n):
...         if n % x == 0:
...             print n, 'equals', x, '*', n/x
...             break
...     else:
...         # loop fell through without finding a factor
...         print n, 'is a prime number

因此, 下面的代码 解决你的问题

for n in range(2, 100):
...     for x in range(2, n):
...         if n % x == 0:
...             break
...     else:
...         # loop fell through without finding a factor
...         print n,
0 请登录后投票
   发表时间:2011-10-06   最后修改:2011-10-06
综合LZ和1楼,这样写效率更高。
1.每次循环只是一半。
2.iRange 提前声明,避免每次都生成。
def isPerime(n):
    flag = True
    iTotal = n / 2 + 1;
    iRange = xrange(2, iTotal);
    for i in iRange:
        if not n % i:
            flag = False
            break
    return flag
0 请登录后投票
论坛首页 编程语言技术版

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