答:
直接爆破:
import math
def is_prime(n):
if n <= 1:
return False
if n <= 3:
return True
if n % 2 == 0 or n % 3 == 0:
return False
for i in range(5, int(math.sqrt(n)) + 1, 6):
if n % i == 0 or n % (i + 2) == 0:
return False
return True
number = 3**100 + 100
if is_prime(number):
print(number, "是素数")
else:
print(number, "是合数")
素性测试算法简化:
import random
def is_prime(n, k=5):
if n <= 1:
return False
if n <= 3:
return True
if n % 2 == 0 or n % 3 == 0:
return False
将 n-1 分解为 (2^r) * d
r = 0
d = n - 1
while d % 2 == 0:
r += 1
d //= 2
进行 k 次测试
for _ in range(k):
a = random.randint(2, n-2)
x = pow(a, d, n)
if x == 1 or x == n - 1:
continue
for _ in range(r - 1):
x = pow(x, 2, n)
if x == n - 1:
break
else:
return False
return True
number = 3**100+100
if is_prime(number):
print(number, "是素数")
else:
print(number, "是合数")
