您的位置:首页 > 其它

(数论及应用2.3)nefu 2 猜想(哥德巴赫猜想:求一个合数可以使用几个素数对来表示)

2014-04-18 20:37 856 查看
本题因为数据良比较小,可使用直接计算(也就是直接打素数表)的方法来解决。。当然是用欧拉筛法和埃斯托尼筛法来做也是可以的。。。

2^24 = 16 777 216

/*
* nefu2.cpp
*
* Created on: 2014年4月18日
* Author: pc
*/

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>

using namespace std;

const int maxn = 16777300;
bool isPri[maxn];

int n;

/**
* 采用直接计算的方法来打表(素数表)
*/
void prepare() {
memset(isPri, true, sizeof(isPri));

isPri[0] = false;//0、1都不是素数
isPri[1] = false;

int i;
for (i = 4; i <= maxn; i += 2) {//把4以上的合数筛掉
isPri[i] = false;
}

int j;
for (i = 3; i <= maxn; i += 2) {
if (isPri[i]) {//如果这是一个素数
for (j = i + i; j <= maxn; j += i) {//那么就把他的倍数给筛掉...
isPri[j] = false;
}
}
}
}

/**
* 用来测试
*/
void testPri() {
int i;
for (i = 0; i < 100; ++i) {
printf("is[%d]:%d\n", i, isPri[i]);
}
}

/**
* 处理输入输出
*/
void work() {
while (scanf("%d", &n) != EOF) {
int t = 0;

int i;
int n1 = n / 2;
for (i = 2; i <= n1; ++i) {
if (isPri[i] && isPri[n - i]) {
t++;
}
}

printf("%d\n", t);
}
}

int main() {
prepare();
work();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐