UVa 686 - Goldbach's Conjecture (II)

来源:互联网 发布:js按钮创建节点 编辑:程序博客网 时间:2024/05/30 05:40

题目:给定一个数字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;}