-
Notifications
You must be signed in to change notification settings - Fork 0
/
Problem48.java
44 lines (39 loc) · 1.02 KB
/
Problem48.java
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
44
/*
* Prompt: Find the last ten digits of the series, 11 + 22 + 33 + ... + 10001000.
*
* Execute: javac Problem48.java; java Problem48; rm Problem48.class
*
* Answer: 9110846700
*/
import java.math.BigInteger;
public class Problem48 {
public static void main(String[] args) {
System.out.println(solveWithMod());
}
public static String solveWithBigInt() {
BigInteger sum = BigInteger.ZERO;
for (int i = 1; i <= 1000; i++) {
sum = sum.add(BigInteger.valueOf(i).pow(i));
}
String result = sum.toString();
return result.substring(result.length() - 10);
}
public static long reduce(long n) {
/*while (n > 10000000000L) { // Slower than mod
n -= 10000000000L;
}
return n;*/
return n % 10000000000L;
}
public static String solveWithMod() {
long sum = 0;
for (int i = 1; i < 1000; i++) {
long n = i; // Last 10 digits of i^i
for (int j = 1; j < i; j++) {
n = reduce(n * i);
}
sum = reduce(sum + n);
}
return Long.toString(sum);
}
}