-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathp087.java
More file actions
43 lines (35 loc) · 1.05 KB
/
p087.java
File metadata and controls
43 lines (35 loc) · 1.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package level04;
import java.util.Collections;
import java.util.List;
import org.junit.Test;
import lib.EulerTest;
public class p087 extends EulerTest {
final int N = 50_000000;
final List<Integer> Ks = list(2, 3, 4);
final List<Integer> primes = primes((int) Math.pow(N, 1. / Collections.min(Ks)));
/**
* Find the number of positive integers below N that can be expressed as the sum of prime kth
* powers, with one kth power for each value of k in Ks.
*/
@Test
public void test() {
boolean[] expressible = new boolean[N + 1];
helper(0, 0, expressible);
for (boolean b : expressible)
if (b)
ans++;
check(1097343);
}
void helper(int i, int sum, boolean[] expressible) {
if (i == Ks.size()) {
expressible[sum] = true;
return;
}
for (int p : primes) {
int newSum = sum + ipow(p, Ks.get(i));
if (newSum > N)
break;
helper(i + 1, newSum, expressible);
}
}
}