project euler 87
来源:互联网 发布:sql编程基础 编辑:程序博客网 时间:2024/06/10 05:54
Problem 87
Prime power triples
The smallest number expressible as the sum of a prime square, prime cube, and prime fourth power is 28. In fact, there are exactly four numbers below fifty that can be expressed in such a way:
28 = 22 + 23 + 24
33 = 32 + 23 + 24
49 = 52 + 23 + 24
47 = 22 + 33 + 24
How many numbers below fifty million can be expressed as the sum of a prime square, prime cube, and prime fourth power?
素数幂三元组
最小的可以表示为一个素数的平方,加上一个素数的立方,再加上一个素数的四次方的数是28。实际上,在小于50的数中,一共有4个数满足这一性质:
28 = 22 + 23 + 24
33 = 32 + 23 + 24
49 = 52 + 23 + 24
47 = 22 + 33 + 24
有多少个小于五千万的数,可以表示为一个素数的平方,加上一个素数的立方,再加上一个素数的四次方?
package projecteuler;import java.util.ArrayList;import java.util.HashSet;import java.util.List;import java.util.Set;import junit.framework.TestCase;public class Prj87 extends TestCase {public static final int LIMIT = 50000000;// public static final int LIMIT = 50;public void testPrimePowerTriples() {int v = 500000000;v = (int) Math.sqrt(1.0 * v / 3);System.out.println("v=" + v);List<Integer> primeList = new ArrayList<Integer>();for (int i = 2; i < v + 1; i++) {if (isPrime(i)) {primeList.add(i);}}Set<PowerDigital> set = new HashSet<PowerDigital>();int[] arr = new int[3];dfs(set, arr, 0, primeList);System.out.println("count=" + set.size());for (PowerDigital p : set) {System.out.println(p);}}private boolean isPrime(int val) {if (val <= 10) {if (val == 2 || val == 3 || val == 5 || val == 7) {return true;}return false;}if (val % 2 == 0) {return false;}for (int i = 3; i * i <= val; i++) {if (val % i == 0) {return false;}}return true;}void dfs(Set<PowerDigital> set, int[] arr, int start,List<Integer> primeList) {if (start >= arr.length) {return;}for (int i = 0; i < primeList.size(); i++) {int val = primeList.get(i);if (start == 0) {arr[0] = val;dfs(set, arr, start + 1, primeList);} else if (start == 1) {int sum = (int) (Math.pow(arr[0], 2) + Math.pow(val, 3));if (sum > LIMIT) {return;}arr[1] = val;dfs(set, arr, start + 1, primeList);} else if (start == 2) {int sum = (int) (Math.pow(arr[0], 2) + Math.pow(arr[1], 3) + Math.pow(val, 4));if (sum > LIMIT) {return;}arr[2] = val;set.add(new PowerDigital(arr[0], arr[1], arr[2], sum));}}}public static class PowerDigital {public int i;public int j;public int k;public int val;public PowerDigital(int i, int j, int k, int val) {super();this.i = i;this.j = j;this.k = k;this.val = val;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + val;return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;PowerDigital other = (PowerDigital) obj;if (val != other.val)return false;return true;}@Overridepublic String toString() {return "[i=" + i + ", j=" + j + ", k=" + k + ", val=" + val + "]";}}}
0 0
- project euler 87
- Project Euler
- project euler
- Project Euler
- Project Euler:Problem 87 Prime power triples
- Project Euler .net
- Project Euler 0
- Project Euler 1-6
- Project Euler 7-10
- Euler Project Problem 6
- project euler problem 11
- project euler problem14
- Project Euler Problem 81
- Project Euler Problem 60
- Project Euler Problem 59
- Project Euler Problem 58
- Project Euler Problem 57
- Project Euler Problem 16
- Ubuntu 创建 eclipse launcher
- 解决Android使用第三方库.so自动删除问题
- 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
- Android Studio 教程(干货)
- 中国近代史大事年表
- project euler 87
- 正则表达式总结
- 中文分词之过滤候选词以及去重
- Java泛型
- iOS 开发中“宏”的高级使用——单利
- Android Studio系列教程四--Gradle基础
- 使用jsoup从网站抓取数据
- Java 并发工具包 java.util.concurrent 用户指南
- 接入百度地图