감 ¶
2005/02/18 Accepted 0:00.152 448
기 . 2 . 까 . 기 8 4개 결 . 4개 기 2 . 8 곤 4개 . . 게 .
기 . 2 . 까 . 기 8 4개 결 . 4개 기 2 . 8 곤 4개 . . 게 .
¶
~cpp
// no10168 - SumOfFourPrimes(a)
#include <iostream>
#include <cmath>
using namespace std;
const int MAX = 450;
void setPrimeArr(int * prim);
bool findPrim(int formerPrim, bool isEven, int * prim);
void showPrime(int prime1, int prime2, bool isEven);
int main()
{
int number;
int primes[MAX] = {2, 3, 5, 7, 11, 13,};
setPrimeArr(primes);
while (cin >> number)
{
if (number < 8)
cout << "Impossible.";
else if (number % 2 != 0)
{
cout << "2 3 ";
findPrim(number - 5, false, primes);
}
else if (number % 4 == 0)
findPrim(number/2, true, primes);
else
{
findPrim(number/2 - 1, false, primes);
findPrim(number/2 + 1, false, primes);
}
cout << endl;
}
return 0;
}
bool findPrim(int formerPrim, bool isEven, int * prim)
{
bool success;
int prime1, prime2;
for (int i=0; i < MAX; i++)
{
prime1 = prim[i];
prime2 = formerPrim - prime1;
success = true;
for (int j=0; j < MAX; j++)
{
if(prime2 > prim[j] && prime2 % prim[j] == 0)
{
success = false;;
break;
}
}
if (success)
{
showPrime(prime1, prime2, isEven);
break;
}
}
return true;
}
void showPrime(int prime1, int prime2, bool isEven)
{
cout << prime1 << " " << prime2 << " ";
if (isEven)
cout << prime1 << " " << prime2;
}
void setPrimeArr(int * prim)
{
int countPrimes = 6;
bool boolPrimes;
for (int i=15; ; i+=2)
{
boolPrimes = true;
for (int j=3; j <= sqrt(i); j+=2)
{
if (i % j == 0)
{
boolPrimes = false;
break;
}
}
if(boolPrimes)
prim[countPrimes++] = i;
if (countPrimes > MAX)
break;
}
}










