C++ 中的普罗思数

2025 年 5 月 22 日 | 阅读 7 分钟

Proth 数是形如 N = k⋅2n + 1 的正整数,其中 k 是一个奇正整数,n 是一个正整数,且 2n > k。这些数字对于素性检验和数论很重要。Proth 素数是素数形式的 Proth 数。Proth 定理提供了一种确定这些数是否为素数的方法。密码学和数学研究都使用 Proth 数。在程序上,它们可以通过确认其结构并使用素性检查算法(如模运算)在 C++ 中识别。

确定 Proth 数序列的公式

N = k⋅2n + 1

由于 k 是一个奇正整数,n 是一个正整数,因此 2n > k。

Proth 素数:在数论中,Proth 数被广泛研究,并在素性检验中发挥重要作用。

要点

C++ 中 Proth 数的几个关键点如下

  1. 形式:Proth 数的数学表示形式定义了它。
  2. Proth 定理
    Proth 数 N = k⋅2n + 1 是素数,如果存在整数 x 使得:x(N-1)/2=-1(Mod N)。
  3. 应用:Proth 数在密码学、素性检验和其他计算数学领域都有应用。

示例

对于 K=1 且 n=2:N = 1⋅22 + 1=5(这是一个素数)

对于 K=3 且 n=3:N = 3⋅23 + 1=25(这不是素数)

对于 K=5 且 n=6:N = 5⋅26 + 1=321(这不是素数)

Proth 数的方法

  • 输入要检查条件的数字。
  • 使用提供的公式确定给定的数字是否为 Proth 数。
  • 当条件的值被打印时,显示一个 Proth 数。
  • 如果不是真,则该数字不是 Proth 数。

验证数字是否为 Proth 素数和 Proth 数的算法

  1. 输入
    一个正整数 N。
  2. 检查 Proth 数
    • 如果 N≤0 或 N−1 不能被 2 整除,则返回 false。
    • 计算 k 为 N−1。
    • 当 k 是偶数时,不断将 k 除以 2,并计算除法的次数 (n)。
    • 如果 k 是奇数且 2n >k,则 N 是 Proth 数;否则,它不是。
  3. 检查 Proth 素数(可选)
    • 如果 N 不是 Proth 数,则返回 false。
    • 计算指数=(N−1)/2。
    • 对于从 2 到 N−1 的整数 X:
      1. 如果 X指数 mod N=N−1,则 N 是 Proth 素数。
    • 如果没有找到这样的 X,则 N 不是 Proth 素数。

输出:指示 N 是否为 Proth 数和/或 Proth 素数。

伪代码

示例 1

让我们以一个例子来说明 C++ 中的 Proth 数。

输出

Enter a number to check if it is a Proth number: 24
24 is not a Proth number.
Enter a number to check if it is a Proth number: 36
36 is not a Proth number.
Enter a number to check if it is a Proth number: 301
301 is a Proth number!
Enter a number to check if it is a Proth number: 321
321 is a Proth number!   

说明

  • 该程序从给定的 N 中删除 k 以检查它是否是 Proth 数。
  • 它确保 N 遵循 Proth 数的格式。
  • 如果满足所有要求,则已确认 N 是 Proth 数。

示例 2

让我们再举一个例子来说明 C++ 中的 Proth 数。

输出

Enter a number to check if it is a Proth number: 25
25 is a Proth number.
However, 25 is not a Proth prime.
Enter a number to check if it is a Proth number: 321
321 is a Proth number.
However, 321 is not a Proth prime.
Enter a number to check if it is a Proth number: 121
121 is not a Proth number.   

说明

  1. Proth 数检查
    N = k⋅2n + 1 是通过提取 k 并验证 2n >k
  2. Proth 素数检查
    x(N-1)/2 Mod N= N-1
  3. 输出:它显示 N 是否为 Proth 素数或 Proth 数。

示例 3

这是另一个 C++ 程序的示例,可用于验证给定数字是否为 Proth 数。为了提高效率,它还可以使用模运算来检查 Proth 素性。

输出

Enter a number to check if it is a Proth number: 13
13 is a Proth number.
Additionally, 13 is a Proth prime!
Enter a number to check if it is a Proth number: 25
25 is a Proth number.
However, 25 is not a Proth prime.   

结论

总之,这些Proth 数被定义为符合 N = k⋅2n + 1 形式并满足某些要求的整数,这对于计算数学和数论至关重要。这是因为素性检验非常依赖这些数字,尤其是在确定既是素数又是 Proth 数的 Proth 素数时。我们必须使用 Proth 定理来寻找 Proth 素数,但是 Proth 数可以通过计算机通过简单的结构属性检查来验证。这些概念通过迭代检查和模运算方法很好地转化到 C++ 中。理论的辉煌和实际的应用可以在高级数学和密码学中相遇,正如 Proth 数所展示的那样。


下一主题重复数字 - C++