1099: 歌德巴赫猜想
Time Limit: 1 Sec Memory Limit: 128 MBDescription
歌德巴赫猜想大家都很熟悉吧?
给一个数,能够分解成两个素数的和.
现在要给你一个n,6 <= n < 1000000,让你求他会分解成哪两个素数?
如果存在多组解,则要求第一个素数为最小的那组。
给一个数,能够分解成两个素数的和.
现在要给你一个n,6 <= n < 1000000,让你求他会分解成哪两个素数?
如果存在多组解,则要求第一个素数为最小的那组。
Input
测试包括多组数据,每行一个数。
整个测试以数字零代表结束。
整个测试以数字零代表结束。
Output
将小于等于n的偶数拆分为2个质数之和,列出所有方案!
Sample Input
8
20
42
0
Sample Output
8 = 3 + 5
20 = 3 + 17
42 = 5 + 37
HINT
Source
#include<iostream>
using namespace std;
int P[1000000]={0}; //假设全为素数
void Prime()
{
//这里用排除法,否则肯能超时
for(int i=2;i<1000000;i++)
{
if(P[i]==0)
{
for(int j=i*2;j<1000000;j+=i) //i的整数倍不是素数,排除
P[j]=1;
}
}
}
int main()
{
int n;
Prime();
while(cin>>n&&n)
{
for(int j=2;j<n;j++)
{
if(P[j]==0&&P[n-j]==0)
{cout<<n<<" "<<"="<<" "<<j<<" "<<"+"<<" "<<n-j<<endl;break;}
}
}
return 0;
}