锁定老帖子 主题:会求100的质数,给8000
精华帖 (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的方式吧 强大的列表解析~ |
|
返回顶楼 | |
发表时间: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。只判断奇数,并且只用已经判断出的质数去除,看是否可以整除。 |
|
返回顶楼 | |
发表时间:2011-04-25
n不能够被不大于根号n的任何素数整除,则n是一个素数
10 以内的只是2,3,5,7,所以大于10的只需判断能否被这4个整除就够了。 |
|
返回顶楼 | |
发表时间:2011-04-25
计算机只是帮人做事的,何必非要用square去算100呢?
|
|
返回顶楼 | |
发表时间:2011-04-27
小问一句啊,为什么要用平方,而不用开方或是截半呢
|
|
返回顶楼 | |
发表时间: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) |
|
返回顶楼 | |
发表时间:2011-04-28
ericwzc 写道 n不能够被不大于根号n的任何素数整除,则n是一个素数
10 以内的只是2,3,5,7,所以大于10的只需判断能否被这4个整除就够了。 这个素数的定义(用概念来验证概念)在数学上有问题吧... |
|
返回顶楼 | |
发表时间: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, 这就引起了矛盾,于是假设不成立,原命题成立。 |
|
返回顶楼 | |
发表时间: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, |
|
返回顶楼 | |
发表时间: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 |
|
返回顶楼 | |