#include<iostream>
using namespace std;
bool eros(int m)
{
bool flag = 1;
for (int i = 2;i<=sqrt(m);++i)//因为如果一个数不是素数是合数,那么一定可以由两个自然数相乘得到,其中一个大于或等于它的平方根,一个小于或等于它的平方根。并且成对出现
if (m%i == 0)
{
flag = 0;
break;
}
return flag;
}
int main()
{
int n;
while (cin >> n)
{
if (n == 0)
break;
int sum = 0;
for (int i = 3; i < n / 2; i=i+2)
{
int j = n - i;
if (eros(i) == 1 && eros(j) == 1)//n本身是偶数,如果从2开始,那么j必定偶数,必然无法分拆成两个素数和,故从3开始,而且用i=i+2,加1的话直接得偶数,必然不是素数,不和题意
sum++;
}
cout << sum << endl;
}
return 0;
}
刚开始超时了,做了两个修改,为程序中两个注释的位置。
质数
质数又称素数。指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。换句话说,只有两个正因数(1和自己)的自然数即为素数。
最小的素数是2, 它也是唯一的偶素数。 最前面的素数依次排列为:2,3,5,7,11,13,17,19, 23, 29, 31......
合数
比1大但不是素数的数称为合数。
1和0既非素数也非合数。
自然数中除能被1和本数整除外,还能被其他的数整除的数。
如:6能被1和6整除,也能被2和3整除。