质数打印的几种实现方法

求100以内的素数(效率极低)

# 求100以内的素数
count = 0
for x in range(2,100):
    for i in range(2,x):
        if x % i ==0: #说明是合数
            break
    else:#说明是质数
        print(x , end = '  ')
        count +=1
print(count)   #效率极低

求100000以内的素数的个数

# 求100000以内的素数
import datetime
start = datetime.datetime.now()
count = 0
for x in range(2,100000):
    for i in range(2,int(x ** 0.5)+1):
        if x % i ==0: #说明是合数
            break
    else:#说明是质数
        #print(x)
        count +=1
delta = (datetime.datetime.now() - start).total_seconds()
print(count,delta)#统计的时间为墙上的时间即钟表的时间
# 求100000以内的素数
import datetime
start = datetime.datetime.now()
count = 1
#print(2)
for x in range(3,100000,2):
    for i in range(3,int(x ** 0.5)+1,2):
        if x % i ==0: #说明是合数
            break
    else:#说明是质数
        #print(x)
        count +=1
delta = (datetime.datetime.now() - start).total_seconds()
print(count,delta)#统计的时间为墙上的时间即钟表的时间
# 求100000以内的素数
import datetime
start = datetime.datetime.now()
count = 1
#print(2)
for x in range(3,100000,2):
    if x >10 and x%5 == 0:continue
    for i in range(3,int(x ** 0.5)+1,2):
        if x % i ==0: #说明是合数
            break
    else:#说明是质数
        #print(x)
        count +=1
delta = (datetime.datetime.now() - start).total_seconds()
print(count,delta)#统计的时间为墙上的时间即钟表的时间

使用列表求100000以内的素数

import datetime
start = datetime.datetime.now()
count = 1
#print(2)
primenumbers = [2]#[2]
for x in range(3,100000,2):
    flag = False  #不是素数
    edge = int(x ** 0.5)
    for i in primenumbers:#range(3,int(x ** 0.5)+1,2):
        if i > edge:#int(x ** 0.5):  #是质数
            flag = True
            break
        if x % i ==0: #说明是合数
            break
    if flag:#说明是质数
        #print(x,end=',')
        count +=1
        primenumbers.append(x)
delta = (datetime.datetime.now() - start).total_seconds()
print(count,delta)#统计的时间为墙上的时间即钟表的时间
# 求100000以内的素数
import datetime
start = datetime.datetime.now()
count = 2
#print(2)
primenumbers = [3]#[2]
for x in range(5,100000,2):
    flag = False  #不是素数
    edge = int(x ** 0.5)
    for i in primenumbers:#range(3,int(x ** 0.5)+1,2):
        if i > edge:#int(x ** 0.5):  #是质数
            flag = True
            break
        if x % i ==0: #说明是合数
            break
    if flag:#说明是质数
        #print(x)
        count +=1
        primenumbers.append(x)
delta = (datetime.datetime.now() - start).total_seconds()
print(count,delta)#统计的时间为墙上的时间即钟表的时间

使用素数性质:大于3的素数只有6N-1和6N+1两种形式,如果6N-1和6N+1都是素数称为孪生素数

import datetime
start = datetime.datetime.now()
n = 100000
count = 3 # 2, 3, 5
x = 7 #11,13,17,19,23,25,29
step = 4
while x < n:
    if x % 5 != 0:
        for i in range(3, int(x**0.5)+1, 2):#质数更好
            if x % i == 0: # 合数
                break
        else:
            count += 1
    x += step
    step = 4 if step == 2 else 2
delta = (datetime.datetime.now() - start).total_seconds()
print(count) # 9592
print(delta) # 0.122006
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值