"""
求100000内的素数
从2 开始到自身的-1的数中找到一个能整除的=> 从2开始到自身开平方的数中找到一个能整除的
一个合数可以分解成几个素数的的乘积,也就是说,一个数如果能被一个素数整除就是合数
"""
import datetime
##################方法一 找10万以内素数运算 总计算次数:9592,素数的个数总量:9592 runtime: 0.591973 总循环次数1345442 ##############################
n=100000
l1=[2]
count=1
forcounter=0
starttime=datetime.datetime.now()
for i in range(3,n,2):
for j in range(3,(int(i**0.5)+1),2):
forcounter += 1
if i%j==0:
break
else:
l1.append(i) #加入列表总共花了0.3秒
count+=1
# print("总计算次数:{},素数的个数总量:{}".format(count,len(l1)))
endtime=datetime.datetime.now()
runtime=(endtime-starttime).total_seconds()
print("总计算次数:{},素数的个数总量:{}".format(count,len(l1)))
print("runtime:",runtime)
# print(l1)
print(forcounter)
print("#####################################################################")
##################方法二 找10万以内素数运算 总计算次数:9592,素数的个数总量:9592 untime: 0.591973 总循环次数 2562373##############################
n=100000
l1=[2,3]
count=2
forcounter=0
starttime=datetime.datetime.now()
for num in range(4,n):
if num%6!=1 and num%6!=5:
continue
else:
snum=int(num**0.5+1)
for i in range(5,snum):
forcounter += 1
if not num%i:
break
else:
l1.append(num)
count+=1
endtime=datetime.datetime.now()
runtime=(endtime-starttime).total_seconds()
print("总计算次数:{},素数的个数总量:{}".format(count,len(l1)))
print("runtime:",runtime)
# print(l1)
print(forcounter)
print("#####################################################################")
#################方法三 找10万以内素数运算 总计算次数:9592,素数的个数总量:9592 untime: 0.591973 总循环次数46264478 ##############################
primenumber=[]
count=0
flag=False
st1=datetime.datetime.now()
for x in range(2,100000):
for i in primenumber:
count += 1
if not x % i:
flag=True
break
# if i>=math.ceil(math.sqrt(x)):
if i**2>=x:
print("i=",i,"x=",x)
flag=False
break
if not flag:
primenumber.append(x)
en1=datetime.datetime.now()
s=(en1-st1).total_seconds()
print(len(primenumber))
print(s,count