您的位置:首页 > 编程语言

110705 Summation of Four Primes

2013-12-04 14:40 295 查看
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.");
else
System.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);
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  编程