#!/usr/bin/python
#-*- coding: utf-8 -*-
import time
from math import sqrt
#根据概念判断:
def SelectPrime1(Num):
#2是素数
Prime = [2]
#循环计算3-n之间的数
for i in range(3,Num):
#print ">>>i = %d" %i
for j in range(2, i, 1):
#print ">j = %d" %j
if i % j == 0:
#print ">>j = %d" %j
break
else:
Prime.append(i)
else:
#print Prime
print ">>>The number of prime between 0 and %d is %d" %(Num,len(Prime))
#去掉偶数的判断,时间复杂度O(n/2)
def SelectPrime2(Num):
#2是素数
Prime = [2]
#循环计算3-n之间的数
for i in range(3,Num):
#print ">>>i = %d" %i
if i % 2 == 0:
continue
for j in range(3, i, 2):
#print ">j = %d" %j
if j != "" and (i % j == 0):
#print ">>j = %d" %j
break
else:
Prime.append(i)
else:
#print Prime
print ">>>The number of prime between 0 and %d is %d" %(Num,len(Prime))
def SelectPrime3(Num):
#2是素数
Prime = [2]
#循环计算3-n之间的数
for i in range(3,Num):
#print ">>>i = %d" %i
#int(math.sqrt(i))输出的是比i的开平方小的最大整数,range(m,n)这里,range()函数产生一个从m至n-1的整数列表,所以须要‘+1’
for j in range(2, int(sqrt(i))+1, 1):
#print ">j = %d" %j
if j != "" and (i % j == 0):
#print ">>j = %d" %j
break
else:
Prime.append(i)
else:
#print Prime
print ">>>The number of prime between 0 and %d is %d" %(Num,len(Prime))
def SelectPrime4(Num):
#2是素数
Prime = [2]
#循环计算3-n之间的数
for i in range(3,Num):
#print ">>>i = %d" %i
#int(math.sqrt(i))输出的是比i的开平方小的最大整数,range(m,n)这里,range()函数产生一个从m至n-1的整数列表,所以须要‘+1’
k = int(sqrt(i))+1
for j in range(2, k, 1):
#print ">j = %d" %j
if j != "" and (i % j == 0):
#print ">>j = %d" %j
break
else:
Prime.append(i)
else:
#print Prime
print ">>>The number of prime between 0 and %d is %d" %(Num,len(Prime))
#1. 在循环条件中重复调用sqrt(i)显然是比较浪费时间的;
#2. 判断素数,只要2~sqrt(i)间的质数不能整除i便可;
def SelectPrime5(Num):
#2是素数
Prime = [2]
#循环计算3-n之间的数
for i in range(3,Num):
stop = 0
#print ">i = %d" %i
#int(math.sqrt(i))输出的是比i的开平方小的最大整数,range(m,n)这里,range()函数产生一个从m至n-1的整数列表,所以须要‘+1’
k = int(sqrt(i))+1
#print ">k is %d" %k
#print ">Prime is %s, the length of Prime is %d" %(Prime, len(Prime))
#print ">stop is %d" %stop
#print ">Prime[stop] is %d" %Prime[stop]
#while Prime[stop] < k and stop < len(Prime)会报错IndexError: list index out of range
while stop < len(Prime)and Prime[stop] < k:
#print ">>>stop is %d" %stop
stop += 1
#print ">stop is %d" %stop
for j in range(0, stop, 1):
#print ">Prime[%d] = %d" %(j,Prime[j])
if i % Prime[j] == 0:
break
else:
Prime.append(i)
else:
#print Prime
print ">>>The number of prime between 0 and %d is %d" %(Num,len(Prime))
if __name__ == "__main__":
Num = input("Please enter the Number: ")
#Calculate for Algorithem1
starttime = time.time()
print "Algorithem1 Start Time is: %s" %starttime
SelectPrime1(Num)
endtime = time.time()
print "Algorithem1 End Time is: %s" %endtime
print "Algorithem1 Executed Time is %s:" %(endtime - starttime)
print "---------------------------------"
#Calculate for Algorithem2
starttime = time.time()
print "Algorithem2 Start Time is: %s" %starttime
SelectPrime2(Num)
endtime = time.time()
print "Algorithem2 End Time is: %s" %endtime
print "Algorithem2 Executed Time is %s:" %(endtime - starttime)
print "---------------------------------"
#Calculate for Algorithem3
starttime = time.time()
print "Algorithem3 Start Time is: %s" %starttime
SelectPrime3(Num)
endtime = time.time()
print "Algorithem3 End Time is: %s" %endtime
print "Algorithem3 Executed Time is %s:" %(endtime - starttime)
print "---------------------------------"
#Calculate for Algorithem4
starttime = time.time()
print "Algorithem4 Start Time is: %s" %starttime
SelectPrime4(Num)
endtime = time.time()
print "Algorithem4 End Time is: %s" %endtime
print "Algorithem4 Executed Time is %s:" %(endtime - starttime)
print "---------------------------------"
#Calculate for Algorithem5
starttime = time.time()
print "Algorithem5 Start Time is: %s" %starttime
SelectPrime5(Num)
endtime = time.time()
print "Algorithem5 End Time is: %s" %endtime
print "Algorithem5 Executed Time is %s:" %(endtime - starttime)
print "---------------------------------"
>>> Please enter the Number: 100000 Algorithem1 Start Time is: 1374654766.32 >>>The number of prime between 0 and 100000 is 9592 Algorithem1 End Time is: 1374654940.05 Algorithem1 Executed Time is 173.726000071: --------------------------------- Algorithem2 Start Time is: 1374654940.06 >>>The number of prime between 0 and 100000 is 9592 Algorithem2 End Time is: 1374655034.08 Algorithem2 Executed Time is 94.0160000324: --------------------------------- Algorithem3 Start Time is: 1374655034.09 >>>The number of prime between 0 and 100000 is 9592 Algorithem3 End Time is: 1374655035.58 Algorithem3 Executed Time is 1.49199986458: --------------------------------- Algorithem4 Start Time is: 1374655035.59 >>>The number of prime between 0 and 100000 is 9592 Algorithem4 End Time is: 1374655037.03 Algorithem4 Executed Time is 1.43600010872: --------------------------------- Algorithem5 Start Time is: 1374655037.03 >>>The number of prime between 0 and 100000 is 9592 Algorithem5 End Time is: 1374655039.21 Algorithem5 Executed Time is 2.18399977684: ---------------------------------