Link:https://vjudge.net/contest/172540#problem/F
题目:
把一个偶数拆成两个不同素数的和,有几种拆法呢?
Input
输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。
Output
对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。
Sample Input
30
26
0
Sample Output
3
2
思路:
用素数打表筛出10000内的素数,降低时间复杂度
Code:
#include<cstdio>
int prime[10002]; //main函数外定义大数组,数值默认为0
int main()
{
prime[0]=prime[1]=1;
for(int i=2; i<10002; i++) { //打表,所有非素数标记为1
if(!prime[i])
for(int j=i*i; j<10002; j+=i)
prime[j]=1;
}
int n;
while(scanf("%d",&n),n) {
int cnt=0;
for(int i=0; i<n/2; i++) //注意此处for循环只用到n/2
if(!prime[i]&&!prime[n-i])
cnt++;
printf("%d\n",cnt);
}
return 0;
}