- 论坛徽章:
- 1
|
本帖最后由 给个理由先 于 2013-06-21 21:37 编辑
python初学者代码
- import math
- def IsPrime(n):
- '''calculate a prime'''
- if n<2:
- return False
- elif n==2 or n==3:
- return True
- elif n%2==0:
- return (2, n/2)
- for i in range(3, 1+n/3, 2):
- if n%i==0: return (i, n/i)
- return True
- def Decompose(n):
- '''decompose/factorization to primes'''
- if n<=3:
- return [n]
- factors = []
- rest = n
- while rest>2:
- mark = False
- i=2
- while i<(1+rest/2):
- if rest%i==0:
- factors.append(i)
- rest=rest/i
- mark=True
- break
- i+=1
- if not mark: break
- factors.append(rest)
- factors.sort()
- return factors
- def PrimeList(bounding=1000):
- '''all primes in [1~bounding)'''
- # odds between [3,bounding), cutting all number that can be decomposed!
- mid = round(math.sqrt(bounding)+1)
- number = range(3, bounding, 2)
- for i in number:
- if i<>0:
- for j in range(i, 1+bounding/i, 2):
- number[(i*j>>1)-1]=0
- elif i>mid:
- break
- return [2]+[i for i in number if i<>0]
- def PairPrime(bounding=1000):
- '''the pair prime in [1~bounding)'''
- pp=PrimeList(bounding)
- return [(p[i],p[i+1]) for i in range(len(pp)-1) if p[i]+2==p[i+1]]
- if __name__=='__main__':
- p=PrimeList(100)
- print len([i for i in p if IsPrime(i)==True])==len(p), p
- np=set(range(100))-set(p)
- print len([i for i in np if IsPrime(i)<>True])==len(np), np
- pp=PairPrime(100)
- print len(pp), pp
复制代码 |
|