不管是while循環還是for循環,原理都是取根號,循環到取根號后的數,至於為什么需要循環到開根后的數,我想主要是因為一個數的分解因子在開根號后的數向上取整以下吧。
話不多說,上代碼:
- while循環:
while循環原理如下:
i = 2
while i <= 100:
# 內層循環 j 從2循環到根號 i
j = 2
while j <= (i / j): # j <= (i/j) 等效於 j*j <= i 也就等於 j <= 根號 i
if i % j == 0:
break # 判斷如果i可以被j整除,則提前跳出j的循環
j = j + 1
# 如果j > i/j判斷為真表示正常循環結束,i沒有被j整除,i是素數。 否則就是提前跳出j循環的,i有被j整除,i不是素數。
if j > i / j:
print(i, end=" ")
i = i + 1
輸出結果:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
- 也可以用for循環:
這里的round()函數是向上取整。
import math
for i in range(2, 101):
flag = 0
for j in range(2, round(math.sqrt(i) + 1)):
if i % j == 0:
flag = 1
break
if flag:
continue
print(i)
結果是一樣的!