project euler 97
2015-12-22 18:32
351 查看
Problem
97
Large non-Mersenne primeThe 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; } }
相关文章推荐
- mysql连不上报2013错误
- 获得与设置系统默认设备主音量音量大小以及静音控制函数
- 怎样使android的view动画循环弹动
- Python基础04 运算
- Python基础03 序列
- MySQL字符串转日期
- 优化Postgres-x2 GTM
- 理解JMS规范中消息的传输模式和消息持久化
- project euler 94
- Java解析Json字符串--复杂对象
- QQ消息99+形成--第三方开源--BezierView
- Python基础02 基本数据类型
- Python基础01 Hello World!
- 自定义Toast的显示效果
- 正则表达式
- java枚举的使用
- RecycleView的基本使用方法
- C语言总结
- C++中placement new操作符(经典)
- wxPython+Matplotlib