U E D R , A S I H C RSS

Summation Of Four Primes/문보창

2005/02/18 Accepted 0:00.152 448
. 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; 
   }      
}    
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:28:09
Processing time 0.0098 sec