python输出2~100之间的素数
素数:素数又称质数,是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。如 2、3、7、11 ....思路:两个循环控制一个判断搞定(*^▽^*)外循环 i :遍历2~100,并定义一个初始值一直为True的f标签flag。内循环 j :遍历小于i 的数并被 i 取模,如果取模为0则表示不是素数,flag就赋值为False,跳出循环。判断: 跳出内循环,flag还为True说明 i
素数:素数又称质数,是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。如 2、3、7、11 ....
思路:
两个循环控制一个判断搞定(*^▽^*)
外循环 i :遍历2~100,并定义一个初始值一直为True的标签flag。
内循环 j :遍历小于 i 的数并被 i 取模,如果取模为0则表示是可以被其他数整除的数,那么 判定不是素数,flag就赋值为False,跳出内循环。
判断: 跳出内循环,flag还为True说明 i 为素数。
代码如下
for i in range(2,101):
flag = True # 定义一个标签,判别是否是素数
for j in range(2,i):
if i % j == 0:
flag = False # 取模等于0判定不是一个素数,flag变为False,后面的数也没必要循环了
break
if flag == True: # 跳出内循环,flag还为True则 i 数为素数
print(i,end=' ')
运行结果
只想交作业的同学就可以结束了,想受表扬的同学咱们继续!
优化处理(了解)
本题取值范围较小,下面将本题的100改为100000并计算运行时间
from time import time
start_time = time()
count = 0
for i in range(2,100001):
flag = True # 定义一个标签,判别是否是素数
for j in range(2,i):
if i % j == 0:
flag = False # 取模等于0就不是一个素数,flag变为False,跳出内循环
break
if flag == True: # 跳出外循环,flag还为True则 i 数为素数
count += 1
print("1-100000以内一共有%d个素数"%count)
end_time = time()
run_time = (end_time - start_time)
print("\n运行时间为:%d秒"%run_time)
运行结果为80秒
优化1:
直接取 j 中间值的左边循环,右边省去。假设检测11是不是一个素数,就去这个数的中间值5,5右边的数相除一定不为整数,如 11 / 6 = 1.83 ......11 / 10 = 1.1相除一定为一点几,草图理解如下
优化1代码如下
from time import time
start_time = time()
count = 0
for i in range(2,100001):
flag = True # 定义一个标签,判别是否是素数
for j in range(2,int(i/2)):
if i % j == 0:
flag = False # 取模等于0就不是一个素数,flag变为False,跳出内循环
break
if flag == True: # 跳出外循环,flag还为True则 i 数为素数
count += 1
print("1-100000以内一共有%d个素数"%count)
end_time = time()
run_time = (end_time - start_time)
print("\n运行时间为:%d秒"%run_time)
运行结果为35秒,比优化前快 80-35=45 秒
优化二
取 j 的 平方根值的左边循环,平方根左边的数在右边一定有个对应值,两个对应值相乘结果为100000,草图理解如下:
优化二代码如下
from time import time
start_time = time()
count = 0
for i in range(2,100001):
flag = True # 定义一个标签,判别是否是素数
for j in range(2,int(i**0.5+1)): # 取到开方数
if i % j == 0:
flag = False # 取模等于0就不是一个素数,flag变为False,跳出内循环
break
if flag == True: # 跳出外循环,flag还为True则 i 数为素数
count += 1
print("1-100000以内一共有%d个素数"%count)
end_time = time()
run_time = (end_time - start_time)
print("\n运行时间为:%d秒"%run_time)
运行结果,0秒
更多推荐
所有评论(0)