关于无循环计算素数
2004-12-17 10:14
246 查看
经过反复思考, 我悟到了,就是 : 要在blog上写文章
![](http://blog.csdn.net/Emoticons/teeth_smile.gif)
代码如下, 较之http://community.csdn.net/Expert/topic/3409/3409231.xml 的改进有
用平方判断tn * tn <= prime_bond 取代 tn <= prime_bond,这样可以提高速度10倍左右.从而不用计算级数什么的了.
prime_bond = 0
tn = 3
tmp_prime = 0
prime_number = 0
def mm():
global prime_bond
global tn
global tmp_prime
global prime_number
try:
11 / (tn * tn <= prime_bond) #原来是 tn <= prime_bond
try:
13 / (tmp_prime % tn )
except:
return 0
except:
print tmp_prime,
prime_number += 1
return 0
tn += 2
return 1
def inner_loop(depth):
try:
9 / depth
except:
return mm()
try:
7 / inner_loop(depth - 1)
7 / inner_loop(depth - 1)
7 / inner_loop(depth - 1)
7 / inner_loop(depth - 1)
7 / inner_loop(depth - 1)
7 / inner_loop(depth - 1)
7 / inner_loop(depth - 1)
7 / inner_loop(depth - 1)
7 / inner_loop(depth - 1)
7 / inner_loop(depth - 1)
7 / inner_loop(depth - 1)
7 / inner_loop(depth - 1)
7 / inner_loop(depth - 1)
7 / inner_loop(depth - 1)
7 / inner_loop(depth - 1)
7 / inner_loop(depth - 1)
except:
return 0
return 1
max_number = 10000
n = 3
def gg():
global n
global max_number
global prime_bond
global tmp_prime
global tn
global prime_number
try:
15 /(n < max_number)
tmp_prime = n
#import math
#prime_bond = int(math.sqrt(n))
prime_bond = n # 可以用级数计算int(math.sqrt(n)), 这样可以提高性能, 现在不用了
tn = 3
inner_loop(50) # 内循环递归50层,可以调节
n += 2
return 1
except:
#print prime_number,
return 0
def out_loop(depth):
try:
8/depth
except:
return gg()
try:
7 / out_loop(depth - 1)
7 / out_loop(depth - 1)
7 / out_loop(depth - 1)
7 / out_loop(depth - 1)
7 / out_loop(depth - 1)
7 / out_loop(depth - 1)
7 / out_loop(depth - 1)
7 / out_loop(depth - 1)
7 / out_loop(depth - 1)
7 / out_loop(depth - 1)
7 / out_loop(depth - 1)
7 / out_loop(depth - 1)
7 / out_loop(depth - 1)
7 / out_loop(depth - 1)
7 / out_loop(depth - 1)
7 / out_loop(depth - 1)
except:
return 0
return 1
def get_primes(number):
global max_number
max_number = number
out_loop(100) #递归100层,可以处理2^400之内的数字
import time
oldtime = time.clock()
get_primes(10000)
print time.clock() - oldtime
![](http://blog.csdn.net/Emoticons/teeth_smile.gif)
代码如下, 较之http://community.csdn.net/Expert/topic/3409/3409231.xml 的改进有
用平方判断tn * tn <= prime_bond 取代 tn <= prime_bond,这样可以提高速度10倍左右.从而不用计算级数什么的了.
prime_bond = 0
tn = 3
tmp_prime = 0
prime_number = 0
def mm():
global prime_bond
global tn
global tmp_prime
global prime_number
try:
11 / (tn * tn <= prime_bond) #原来是 tn <= prime_bond
try:
13 / (tmp_prime % tn )
except:
return 0
except:
print tmp_prime,
prime_number += 1
return 0
tn += 2
return 1
def inner_loop(depth):
try:
9 / depth
except:
return mm()
try:
7 / inner_loop(depth - 1)
7 / inner_loop(depth - 1)
7 / inner_loop(depth - 1)
7 / inner_loop(depth - 1)
7 / inner_loop(depth - 1)
7 / inner_loop(depth - 1)
7 / inner_loop(depth - 1)
7 / inner_loop(depth - 1)
7 / inner_loop(depth - 1)
7 / inner_loop(depth - 1)
7 / inner_loop(depth - 1)
7 / inner_loop(depth - 1)
7 / inner_loop(depth - 1)
7 / inner_loop(depth - 1)
7 / inner_loop(depth - 1)
7 / inner_loop(depth - 1)
except:
return 0
return 1
max_number = 10000
n = 3
def gg():
global n
global max_number
global prime_bond
global tmp_prime
global tn
global prime_number
try:
15 /(n < max_number)
tmp_prime = n
#import math
#prime_bond = int(math.sqrt(n))
prime_bond = n # 可以用级数计算int(math.sqrt(n)), 这样可以提高性能, 现在不用了
tn = 3
inner_loop(50) # 内循环递归50层,可以调节
n += 2
return 1
except:
#print prime_number,
return 0
def out_loop(depth):
try:
8/depth
except:
return gg()
try:
7 / out_loop(depth - 1)
7 / out_loop(depth - 1)
7 / out_loop(depth - 1)
7 / out_loop(depth - 1)
7 / out_loop(depth - 1)
7 / out_loop(depth - 1)
7 / out_loop(depth - 1)
7 / out_loop(depth - 1)
7 / out_loop(depth - 1)
7 / out_loop(depth - 1)
7 / out_loop(depth - 1)
7 / out_loop(depth - 1)
7 / out_loop(depth - 1)
7 / out_loop(depth - 1)
7 / out_loop(depth - 1)
7 / out_loop(depth - 1)
except:
return 0
return 1
def get_primes(number):
global max_number
max_number = number
out_loop(100) #递归100层,可以处理2^400之内的数字
import time
oldtime = time.clock()
get_primes(10000)
print time.clock() - oldtime
相关文章推荐
- 关于vue v-for 循环问题(一行显示四个,每一行的最右边那个计算属性)
- 关于素数的一些题目
- 关于里程生时间计算的语句
- 关于处理try-catch循环一次异常,次次异常的一个例子
- 关于计算字节位为1的一个问题
- 关于DW建模中维度建模问题一:自己循环
- 计算素数的算法(一)
- Java(循环语句作业)反序输出、万年历、回文数、99乘法口诀表、素数
- 关于素数(持续更新)
- 关于while循环中的~scanf()
- 关于JS通过正则表达式循环检测多个Email格式_已经测试通过.
- 关于内存溢出产生的死循环
- Paradigms of Computer Programming,编程模式学习中递归调用的练习02-计算素数
- 关于java中对数的计算
- 关于js小数计算的问题
- 关于OpenCL中三重循环的执行次序
- 计算100到200中间的素数的个数并输出
- 揭穿关于云计算的九大谎言
- 关于所写的两个简单sql 循环语句的疑问
- 关于BigDecimal的计算