分拆素数和
Problem Description
把一个偶数拆成两个不同素数的和,有几种拆法呢?
Input
输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。
Output
对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。
Sample Input
30260
Sample Output
32
Source
/*
分析:把一个偶数n拆成两个不同素数的和,有几种拆法呢?(其值不会超过10000)
写一个判断是否为素数的函数 is_prime(num)
暴力判断 从i=2到n/2 如果is_prime(i)&&is_prime(n-i) 则计数cnt++
*/
#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <string>
#include <cstdlib>
#include <vector>
using namespace std;
bool is_prime(int n)
{
if(n==1) return false;
for(int i=2;i<=sqrt(n);i++)
if(n%i==0) return false;
return true;
}
int main(void)
{
int n;
while(scanf("%d",&n)!=EOF,n)
{
int cnt=0;
for(int i=2;i<n/2;i++)
{
if(is_prime(i)&&is_prime(n-i)) cnt++;
}
printf("%d\n",cnt);
}
return 0;
}