Mersenne Number in Java

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

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

梅森数

在数学中,梅森数是指形式为M(n)=2n-1 的数。其中 n 是一个整数。它是 OEIS 序列A000225。如果 n 是素数,则相应的梅森数可能是素数,该数称为梅森素数。它是 OEIS 序列A000043。它以法国数学家Marin Mersenne 的名字命名。

请注意,大多数梅森数都是素数。梅森数的代数性质在确定素数方面很有用。

数学家Leonhard Euler 证明了任何偶数完全数都必须是 2n-1 的形式。

梅森数示例

如果 n = 3,23-1 = 7 (梅森数)

如果 n = 8,28-1 = 255 (梅森数)

如果 n = 13,213-1 = 8191 (梅森数)

同样,我们也可以检查以下数字。

0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535, 131071, 262143, 524287, 1048575, 2097151, 4194303, 8388607, 16777215, 33554431, 67108863, 134217727, 268435455, 536870911, 1073741823, 2147483647, 4294967295 等。

梅森素数

素数 n 使得 2n-1 是素数 (OEIS 序列 A000043)

2, 3, 5, 7, 13, 17, 19, 31, 61, 89, 107, 127, 521, 607, 1279, 2203, 2281, 3217, 4253, 4423, 9689, 9941, 11213, 19937, 21701, 23209, 44497, 86243, 110503, 132049, 216091, 756839, 859433, 1257787, 1398269, 2976221, 3021377, 6972593, 13466917, 20996011, 24036583, 25964951, 30402457, 32582657, 37156667, 42643801, 43112609

如果 2n-1 中的 n 是素数 (OEIS 序列 A000668)

3, 7, 31, 127, 8191, 131071, 524287, 2147483647, 2305843009213693951, 618970019642690137449562111, 162259276829213363391578010288127, 170141183460469231731687303715884105727

还有一些其他的梅森素数已经被计算出来。

2521-1

24423-1

219937-1

2261091-1

2261091-1

21398269-1

最大的梅森素数 (257885161-1) 由数学家Cooper2013 年发现,它是一个有 17425170 位数字的数。

查找梅森数的步骤

  • 读取或初始化 n 的值。
  • 计算 2 的 n 次方,并将结果存储在一个变量 res 中。
  • 从结果中减去 1。

减法后得到的数字是一个梅森数。

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

梅森数 Java 程序

MersenneNumberExample.java

输出 1

Enter a number: 127
127 is a Mersenne number.

输出 2

Enter a number: 88
88 is a not Mersenne number.

让我们创建一个 Java 程序来计算高达 34 的梅森素数。

MersennePrimeExample.java

输出 1

n	2^n-1 

2	3
3	7
5	31
7	127
13	8191
17	131071
19	524287
31	2147483647