project euler 97

来源:互联网 发布:kontakt mac 音源入库 编辑:程序博客网 时间:2024/06/05 08:38

Problem 97


Large non-Mersenne prime

The first known prime found to exceed one million digits was discovered in 1999, and is a Mersenne prime of the form 26972593−1; it contains exactly 2,098,960 digits. Subsequently other Mersenne primes, of the form 2p−1, have been found which contain more digits.

However, in 2004 there was found a massive non-Mersenne prime which contains 2,357,207 digits: 28433×27830457+1.

Find the last ten digits of this prime number.


非梅森大素数

1999年人们发现了第一个超过一百万位的素数,这是一个梅森素数,可以表示为26972593−1,包含有2,098,960位数字。在此之后,更多形如2p−1的梅森素数被发现,其位数也越来越多。

然而,在2004年,人们发现了一个巨大的非梅森素数,包含有2,357,207位数字:28433×27830457+1。

找出这个素数的最后十位数字。

package projecteuler;import java.util.Arrays;import junit.framework.TestCase;public class Prj97 extends TestCase {public static final int LIMIT = 10;/** * 28433^7830457+1 */public void testLargeNonMersennePrime() {int start = 28433;int[] arr = enLarge(int2Arr(start), LIMIT);int power = 7830457;while (power > 0) {arr = multiply(arr, 2);power--;}arr = add(arr, enLarge(int2Arr(1), LIMIT));for (int i = 0; i < arr.length; i++) {System.out.print(arr[i]);}}int[] multiply(int[] arr, int b) {int[] ret = Arrays.copyOf(arr, arr.length);for (int i = 0; i < arr.length; i++) {ret[i] *= b;}for (int i = arr.length - 1; i > 0; i--) {ret[i - 1] = ret[i - 1] + ret[i] / 10;ret[i] = ret[i] % 10;}ret[0] %= 10;return ret;}int[] add(int[] a, int[] b) {assert (a.length == b.length);int[] ret = Arrays.copyOf(a, a.length);for (int i = a.length - 1; i > 0; i--) {int val = a[i] + b[i];ret[i] = val % 10;ret[i - 1] = ret[i - 1] + val / 10;}ret[0] %= 10;return ret;}int[] int2Arr(int val) {String str = Integer.toString(val, 10);int[] ret = new int[str.length()];for (int i = 0; i < ret.length; i++) {ret[i] = Integer.parseInt(String.valueOf(str.charAt(i)));}return ret;}int[] enLarge(int[] val, int bits) {assert (val.length <= bits);int[] ret = new int[bits];for (int i = bits - val.length, j = 0; i < bits; i++, j++) {ret[i] = val[j];}return ret;}}


0 0
原创粉丝点击