您的位置:首页 > 其它

关于无循环计算素数

2004-12-17 10:14 246 查看
经过反复思考, 我悟到了,就是 : 要在blog上写文章


代码如下, 较之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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: