首先 google colab不是程式語言....它是平台名稱
使用的程式語言是Python
基本上判斷此數 n 是否為質數的方法很簡單
你就n除以所有2~n-1之間的數字判斷是否有餘數就好,全部都有餘數就是質數。
反之只要有一個沒有於數就不是質數
當然有更優化的寫法↑不過最基本的要先寫出來。
質數的定義是只有1與該數本身兩個正因數的數
因數用於描述X和Y之間存在的整除關係
用Prolog解釋如下
可整除(X, Y):-
0 is X mod Y.
有因數(X, Y):-
可整除(X, Y).
有因數(X, Y):-
X > Y+1,
可整除(X, Y+1).
有因數(X):-
有因數(X, 2).
是質數(X):-
X < 2,
write(X), write('不是質數').
是質數(2):-
write('2是質數').
是質數(X):-
有因數(X),
write(X), write('不是質數').
是質數(X):-
write(X), write('是質數').
判斷質數無需做找質數的功能
https://primes.utm.edu/lists/small/millions/
到網站下載質數表primes1.txt
primes_list = []
def load_primes():
pass_count=4
f = open("primes1.txt", mode="r")
lines = f.readlines()
count = 0
test_count = 0
for line in lines:
temp_text = ""
count = count + 1
if count <= 4:
continue
if test_count!= 0 and count > test_count:
break
for line2 in line:
if line2.isnumeric():
temp_text=temp_text+line2
else:
if temp_text != "":
primes_list.append(temp_text)
temp_text = ""
f.close()
load_primes()
maxnum=15485863
imput_num= input("輸入數字")
if int(imput_num) > maxnum:
print("超出範圍")
exit()
isprimes=False
for num in primes_list:
if imput_num == num:
isprimes=True
break
if isprimes:
print("質數")
else:
print("不是質數")
如果要快速檢測質數可以參考 Miller Rabin 質數檢測法
https://zh.wikipedia.org/wiki/%E7%B1%B3%E5%8B%92-%E6%8B%89%E5%AE%BE%E6%A3%80%E9%AA%8C
以 Python 來實作:
def miller_rabin(n, k):
if n == 2 or n == 3:
return True
if n % 2 == 0:
return False
s, d = 0, n - 1
while d % 2 == 0:
s += 1
d //= 2
for _ in range(k):
a = random.randrange(2, n - 1)
x = pow(a, d, n)
if x == 1 or x == n - 1:
continue
for _ in range(s - 1):
x = pow(x, 2, n)
if x == n - 1:
break
else:
return False
return True
miller_rabin(265252859812191058636308479999999, 2) # True