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);
}
}
}
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);
}
}
}
相关文章推荐
- PC/UVa 110705/10168 Summation of Four Primes
- 10168 Summation of Four Primes
- UVa 10168 Summation of Four Primes (“1+1+1+1”问题)
- uva 10168 Summation of Four Primes(数论-哥德巴赫猜想)
- Uva 10168 Summation of Four Primes 素数
- uva 10168 Summation of Four Primes(数论-哥德巴赫猜想)
- UVaOJ-10168-Summation of Four Primes 解题报告
- UVa 10168 Summation of Four Primes(数论-哥德巴赫猜想)
- virtual hust 2013.6.21 NEFU 挑战编程----数论 E - Summation of Four Primes
- UVA 10168 Summation of Four Primes(数论)
- UVA-10168 Summation of Four Primes
- UVa Problem Solution: 10168 - Summation of Four Primes
- Summation of Four Primes - PC110705
- UVA10168 Summation of Four Primes【筛选法】
- Summation of Four Primes - PC110705
- UVa Problem 10168 Summation of Four Primes (四素数之和)
- Uva 10168 - Summation of Four Primes
- UVA 10168 Summation of Four Primes(数论)
- UVA-10168 Summation of Four Primes 哥德巴赫猜想
- 数论刷题-uva【10168】- Summation of Four Primes