Skip to content

Commit bd9c2a3

Browse files
committed
It works!
1 parent 11003f7 commit bd9c2a3

File tree

1 file changed

+41
-32
lines changed
  • Challenges_VII/Summation_Of_Four_Primes

1 file changed

+41
-32
lines changed
Lines changed: 41 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,70 +1,79 @@
11
package Challenges_VII.Summation_Of_Four_Primes;
22

33
import java.util.ArrayList;
4+
import java.util.HashMap;
45
import java.util.Scanner;
56

67
public class Main {
78

89
public static ArrayList<Integer> primeList;
10+
public static HashMap<String, Integer> primeHash;
11+
public static final int MAX = 10000000;
912

1013
public static void main(String[] args) {
1114
Scanner s = new Scanner(System.in);
1215
primeList = new ArrayList<Integer>();
13-
genPrimes();
14-
try{
16+
primeHash = new HashMap<String,Integer>();
17+
genPrimes();
18+
try {
1519
while (true) {
1620
String primes = "";
1721
int next = Integer.parseInt(s.nextLine().trim());
18-
if (next > 8) {
22+
if (next >= 8) {
1923
if ((next - 4) % 2 == 0) {
2024
next -= 4;
2125
primes += "2 2 ";
2226
} else {
2327
next -= 5;
2428
primes += "2 3 ";
2529
}
26-
30+
2731
for (int p : primeList) {
28-
if (primeList.contains(next - p)) {
29-
primes += p + " " + primeList.get(primeList.indexOf(next - p));
32+
int potential = next - p;
33+
if (primeHash.get(String.valueOf(potential)) != null) {
34+
primes += p + " " + potential;
3035
break;
3136
}
3237
}
33-
38+
System.out.println(primes.trim());
39+
3440
} else {
35-
int temp = 0;
36-
while (temp != next) {
37-
temp += 2;
38-
primes += "2 ";
39-
}
41+
System.out.println("Impossible.");
4042
}
41-
System.out.println(primes.trim());
43+
4244
}
43-
}catch(Exception e){
45+
} catch (Exception e) {
4446
s.close();
4547
System.exit(0);
4648
}
4749

4850
}
4951

50-
public static void genPrimes() {
51-
primeList.add(2);
52-
for (int i = 3; i < 1000000; i++) {
53-
if (i % 2 != 0) {
54-
int rootX = (int) Math.sqrt(i);
55-
boolean divisible = false;
56-
for (int j = 2; j < rootX + 1; j++) {
57-
if (i % j == 0) {
58-
divisible = true;
59-
break;
60-
}
61-
}
62-
if (!divisible) {
63-
primeList.add(i);
64-
}
52+
public static void genPrimes(){
53+
54+
boolean[] sieve = new boolean[MAX+1];
55+
sieve[0] = true;
56+
sieve[1] = true;
57+
sieve[2] = false;
6558

66-
}
67-
}
68-
}
59+
for(int i = 4; i <= MAX; i+=2)
60+
sieve[i] = true;
61+
62+
for(int i = 3; i < (int)Math.sqrt(MAX)+1; i+=2)
63+
{
64+
if(!sieve[i])
65+
{
66+
for(int j = i*i; j <= MAX; j+=i)
67+
sieve[j] = true;
68+
}
69+
}
70+
71+
for(int b = 0; b < sieve.length; b++){
72+
if(!sieve[b]){
73+
primeList.add(b);
74+
primeHash.put(String.valueOf(b), b);
75+
}
76+
}
6977

78+
}
7079
}

0 commit comments

Comments
 (0)