📜  检查给定的数字是否为Wagstaff素数(1)

📅  最后修改于: 2023-12-03 15:40:36.467000             🧑  作者: Mango

检查给定的数字是否为Wagstaff素数

简介

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

代码说明:

  1. 首先判断待判断的数字是否为偶数,若是,则肯定不是Wagstaff素数,直接返回False。

  2. 计算$2^n$,并且计算$2^n/n-1$,赋值给变量wagstaff_num

  3. 判断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素数,可以看出函数的判断是正确的。