Fermat Number in Java

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

在本节中,我们将讨论什么是费马数,并创建 Java 程序来检查给定的数字是否为费马数费马数程序经常出现在 Java 编程面试和学术中。

费马数

费马数首先由 Pierre de Fermat 研究。形式为22k +1(其中 k>=0)的非负奇数称为费马数。它表示为Fn。它是 OEIS 整数序列A000215**。

Fermat Number in Java

生成费马数很困难。因为它们用于密码学和伪随机数生成。它还有一些强大的数学特性。

费马数示例

前几个费马数是 3, 5, 17, 257, 65537, 4294967297, 18446744073709551617。

前 10 个费马数

F₀ = 220 +1 = 3

F₁ = 221 +1 = 5

F₂ = 222 +1 = 17

F₃ = 223 +1 = 257

F₄ = 224 +1 = 65537

F5 = 225 +1=4294967297

F6 = 226 +1=18446744073709551617

F₇ = 227 +1 = 340282366920938463463374607431768211457

F₈ = 228 +1 = 115792089237316195423570985008687907853269984665640564039457584007913129639937

F₉ = 229 +1 =

134078079299425970995740249982058461274793658205923933777235614437217640300
73546976801874298166903427690031858186486050853753882811946569946433649006084097
有人推测,这个序列中只有前 5 个数字是素数。它是 OEIS 序列 A019434。

F₀ = 220 +1 = 3

F₁ = 221 +1 = 5

F₂ = 222 +1 = 17

F₃ = 223 +1 = 257

F₄ = 224 +1 = 65537

查找费马数的步骤

  1. 读取或初始化一个整数 n。
  2. 使用 Math.pow() 方法计算 2n 并将结果存储在一个变量 (p) 中。
  3. 现在,计算 2p 并将结果存储在一个变量 (res) 中。
  4. 将变量 (res) 加 1,并将结果存储在一个变量 (f) 中。它是一个费马数。

让我们在 Java 程序中实现上述步骤。

费马数 Java 程序

FermatNumberExample1.java

输出

3.0
5.0
17.0
257.0
65537.0
4.294967297E9
1.8446744073709552E19
3.4028236692093846E38
1.157920892373162E77
1.3407807929942597E154
Infinity

FermatNumberExample.java

输出

First 10 Fermat numbers:
F[0] = 3
F[1] = 5
F[2] = 17
F[3] = 257
F[4] = 65537
F[5] = 4294967297
F[6] = 18446744073709551617
F[7] = 340282366920938463463374607431768211457
F[8] = 115792089237316195423570985008687907853269984665640564039457584007913129639937
F[9] = 13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084097

First 12 Fermat numbers factored:
F[0] = 3 (PRIME)
F[1] = 5 (PRIME)
F[2] = 17 (PRIME)
F[3] = 257 (PRIME)
F[4] = 65537 (PRIME)
    Pollard rho try factor 4294967297 elapsed time = 8 ms (factor = 641).
F[5] = 641 * 6700417
    Pollard rho try factor 18446744073709551617 elapsed time = 33 ms (factor = 274177).
F[6] = 274177 * 67280421310721