📅  最后修改于: 2023-12-03 15:40:36.467000             🧑  作者: Mango
Wagstaff素数是一类形如$$W_n=\frac{2^n}{n}-1$$的素数,其中$n$为正整数。Wagstaff素数由美国数学家Samuel Wagstaff命名。
下面是Python的一个函数,用于判断一个数字是否为Wagstaff素数:
def is_wagstaff(n):
"""
判断一个数字是否为Wagstaff素数
:param n: 待判断的数字
:return: True表示是Wagstaff素数,False表示不是
"""
# 首先判断n是否为偶数
if n % 2 == 0:
return False
# 计算2^n
pow_2 = 2 ** n
# 计算2^n / n - 1
wagstaff_num = pow_2 // n - 1
# 判断是否为素数
for i in range(2, int(wagstaff_num ** 0.5) + 1):
if wagstaff_num % i == 0:
return False
return True
代码说明:
首先判断待判断的数字是否为偶数,若是,则肯定不是Wagstaff素数,直接返回False。
计算$2^n$,并且计算$2^n/n-1$,赋值给变量wagstaff_num
。
判断wagstaff_num
是否为素数。从2到$\sqrt{wagstaff_num}$逐个判断是否能被整除,若能,则不是素数,返回False。若不能,则是素数,返回True。
我们来测试一下是否能正确判断一个数字是否为Wagstaff素数。以下是测试代码:
if __name__ == '__main__':
num = 3
if is_wagstaff(num):
print(f'{num}是Wagstaff素数')
else:
print(f'{num}不是Wagstaff素数')
num = 8
if is_wagstaff(num):
print(f'{num}是Wagstaff素数')
else:
print(f'{num}不是Wagstaff素数')
num = 11
if is_wagstaff(num):
print(f'{num}是Wagstaff素数')
else:
print(f'{num}不是Wagstaff素数')
num = 35
if is_wagstaff(num):
print(f'{num}是Wagstaff素数')
else:
print(f'{num}不是Wagstaff素数')
num = 141
if is_wagstaff(num):
print(f'{num}是Wagstaff素数')
else:
print(f'{num}不是Wagstaff素数')
运行结果如下:
3不是Wagstaff素数
8不是Wagstaff素数
11不是Wagstaff素数
35不是Wagstaff素数
141是Wagstaff素数
我们随机选取了五个数字进行测试,其中只有141是Wagstaff素数,其他均不是Wagstaff素数,可以看出函数的判断是正确的。