project euler 41
2015-12-04 21:24
369 查看
Problem
41
Pandigital primeWe shall say that an n-digit number is pandigital if it makes use of all the digits 1 to n exactly once. For example, 2143 is a 4-digit pandigital and is also prime.
What is the largest n-digit pandigital prime that exists?
全数字的素数
如果一个n位数恰好使用了1至n每个数字各一次,我们就称其为全数字的。例如,2143就是一个4位全数字数,同时它恰好也是一个素数。
最大的全数字的素数是多少?
@Test public void test() { for (int i = 9; i >= 2; i--) { Combination comb = new Combination(i); List<int[]> combinations = comb.generateCom(); for (int j = combinations.size() - 1; j >= 0; j--) { int val = comb.getIntVal(combinations.get(j)); if (isPrime(val)) { System.out.println("maxVal=" + val + ",bits=" + i); return; } } } } public static boolean isPrime(int val) { int num = Math.abs(val); if (num < 10) { if (num == 2 || num == 3 || num == 5 || num == 7) { return true; } return false; } else { for (int i = 2; i * i <= num; i++) { if (num % i == 0) { return false; } } return true; } } public static class Combination { private int[] startArr; public Combination(int size) { startArr = new int[size]; for (int i = 0; i < size; i++) { startArr[i] = i + 1; } } public List<int[]> generateCom() { List<int[]> ret = new ArrayList<int[]>(); ret.add(Arrays.copyOf(startArr, startArr.length)); while (true) { int lastAsc = findLastAsc(startArr); if (lastAsc == -1) { break; } int lasBigThanAsc = findBigThanAsc(startArr, lastAsc); exchangeEach(lastAsc, lasBigThanAsc, startArr); ret.add(Arrays.copyOf(startArr, startArr.length)); } return ret; } private int findBigThanAsc(int[] startArr2, int lastAsc) { int i = 0; for (i = startArr2.length - 1; i > lastAsc; i--) { if (startArr2[i] > startArr2[lastAsc]) { return i; } } assert (i > lastAsc); return i; } private void exchangeEach(int lastAsc, int lasBigThanAsc, int[] startArr2) { int temp = startArr2[lastAsc]; startArr2[lastAsc] = startArr2[lasBigThanAsc]; startArr2[lasBigThanAsc] = temp; int[] sortArr = getCopyArr(lastAsc + 1, startArr2); for (int i = 0; i < sortArr.length / 2; i++) { temp = sortArr[sortArr.length - 1 - i]; sortArr[sortArr.length - 1 - i] = sortArr[i]; sortArr[i] = temp; } for (int i = lastAsc + 1; i < startArr2.length; i++) { startArr2[i] = sortArr[i - lastAsc - 1]; } } private int[] getCopyArr(int start, int[] startArr2) { int[] ret = new int[startArr2.length - start]; for (int i = start; i < startArr2.length; i++) { ret[i - start] = startArr2[i]; } return ret; } private int findLastAsc(int[] startArr2) { for (int i = startArr2.length - 1; i > 0; i--) { if (startArr2[i] > startArr2[i - 1]) { return i - 1; } } return -1; } public int getIntVal(int[] arr) { int sum = arr[0]; for (int i = 1; i < arr.length; i++) { sum = sum * 10 + arr[i]; } return sum; } }
相关文章推荐
- 初探动态规划之数字三角形
- linux 安装mysql
- 利用JQuery jqprint实现打印功能
- 计算理论中的莱斯定理(Rice's Theorem)——证明与应用
- [置顶] 亮仔移植u-boot系列之-- S3c2440在最新版本U-boot-2015.10移植(支持SPL模式启动) -- 1
- Android Studio 快捷键
- Android自定义组件之圆形图片
- OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(1)
- 用eclipse创建servlet小程序
- POJ 2352 Stars (区间建树,单点更新)
- cf C - Booking System
- centos下httpd-2.4的编译安装
- leetcode Count and Say
- project euler 40
- centos下httpd-2.4的编译安装
- android 布局优化(一)
- 问题处理:找不到Pch预编译文件?
- MATLAB 利用filter函数实现滑动平均滤波
- 什么是Code First(EF Code First 系列)
- Android 图片选择器