110705 Summation of Four Primes

来源:互联网 发布:网络挣钱项目 编辑:程序博客网 时间:2024/06/09 18:31


import java.util.*;import static java.lang.Math.*;public class Main {private static Map<Integer, Boolean> s_PrimesInfo;static{s_PrimesInfo = new HashMap<Integer, Boolean>();}private static boolean IsPrime(int x){Boolean result = s_PrimesInfo.get(x);if (result != null)return result;int mid = (int)sqrt(x);result = true;for (int i = 2; i <= mid; ++i)if ((x % i) == 0)result = false;s_PrimesInfo.put(x, result);return result;}private static void GetTwoPrimes(int x, List<Integer> results){int mid = x/2;for (int i = 2; i <= mid; ++i){if (IsPrime(i) && IsPrime(x - i)){results.add(i);results.add(x - i);return;}}}private static List<Integer> GetFourPrimes(int x){if (x <= 7)return null;List<Integer> results = new LinkedList<Integer>();results.add(2);x -= 2;if ((x % 2) == 0){results.add(2);x -= 2;}else{results.add(3);x -= 3;}GetTwoPrimes(x, results); return results;}private static void Handle(int x){List<Integer> results = GetFourPrimes(x);if (results == null)System.out.println("Impossible.");elseSystem.out.println(results.get(0) + " " + results.get(1) + " " + results.get(2) + " " + results.get(3)); }public static void main(String[] args){Scanner inScanner = new Scanner(System.in);while (inScanner.hasNextInt()){int a = inScanner.nextInt();Handle(a);}}}


原创粉丝点击