Summation of Four Primes
题意
判断一个数能否拆成4个质数,不能输出 “Impossible.”,能则打印出4个数。
挺不错的用来练习素数打表的题。
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
#define ll long long
const int maxn=10000000;
int prime[maxn];
int use[1000000];
int num;
void init_prime()
{
num=0;
memset(prime,0,sizeof(prime));
prime[0]=prime[1]=1;
for(int i=2;i<maxn;i++)
if(prime[i]==0)
{
use[++num]=i;
for(int j=2*i;j<maxn;j=j+i)
prime[j]=1;
}
}
void output(int n)
{
for(int i=1;i<=num&&use[i]<n;i++)
if(!prime[n-use[i]]){
cout<<use[i]<<" "<<n-use[i]<<endl;
break;
}
}
int main()
{
init_prime();
int n;
while(cin>>n)
{
if(n<8)
{
cout<<"Impossible."<<endl;
continue;
}
if(n&1)
{
cout<<"2 3 ";
n-=5;
output(n);
}else{
cout<<"2 2 ";
n-=4;
output(n);
}
}
return 0;
}