题目:给定一个数字n问可以找出多少对素数,a,b使得a+b = n。
分析:简单题、数论。首先计算素数,然后利用循环枚举素数加和,使得和值+1即可。
#include <iostream>
#include <cstdlib>
using namespace std;
int visit[32768];
int prime[32768];
int calcu[32768];
int main()
{
//打标计算32768以内的素数
for ( int i = 0 ; i < 32768 ; ++ i )
visit[i] = 1;
int count = 0;
for ( int i = 2 ; i < 32768 ; ++ i )
if ( visit[i] ) {
prime[count ++] = i;
for ( int j = 2*i ; j < 32768 ; j += i )
visit[j] = 0;
}
//利用一直素数进行拼数
for ( int i = 0 ; i < 32768 ; ++ i )
calcu[i] = 0;
for ( int i = 0 ; i < count ; ++ i )
for ( int j = i ; j < count ; ++ j )
if ( prime[i]+prime[j] < 32768 )
calcu[prime[i]+prime[j]] ++;
else break;
int n;
while ( cin >> n && n )
cout << calcu[n] << endl;
return 0;
}