关于无循环计算素数

经过反复思考, 我悟到了,就是 :  要在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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值