(数论及应用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();
}
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();
}
相关文章推荐
- 哥德巴赫猜想-一个偶数可以表示为两个素数之和
- 验证歌德巴赫猜想:任何一个充分大的偶数都可以表示为两个素数之和。请输入一个偶数,将其表示成两个素数之和。
- 哥德巴赫猜想之一:是任何一个大于5的偶数都可以表示为两个素数之和(C语言)
- (数论 素数分布的应用)nefu 117 素数个数的位数(素数定理的位数公式)
- 数据库SQL中的分钟表示应该使用MI(非常重要的一个问题,以前一直认为和java中一样,用mm就可以表示);校对规则(查询时区分大小写)
- [数论] NEFU 2 猜想 筛素数
- 一个使用方便的对FMDB进行封装的框架和一个可以切应用图标的应用
- (Relax 数论1.13)POJ 2909 Goldbach's Conjecture(欧拉筛法的应用:给出一个偶数,要求在这个偶数的范围内,有几对素数和是等于这个偶数的,注意素数对的不重复性! )
- 在看官方的例子时候由一个grid实例,在每一行之前有个加号,展开可以显示内容,在实际应用中还是非常有用的,照搬例子的代码,发现老是提示对象不存在,查阅资料后发现是没有加载插件,这里和大家分享下Ext.grid.RowExpander插件的使用,
- 公司开发多个应用的时候是否可以使用同一个签名(*.jks)
- 任何一个合数都可以写成几个质数相乘的形式
- 输入一个不小于6的偶数,它可以表示成二个奇素数的和
- Coin HDU - 2662 两个素数可以表示比一个数大的所有数
- 哥德巴赫猜想: 任何一个大于2的偶数都可以拆分为两个素数的和
- 使用nginx如何让一个tomcat下的多个应用可以被多个域名绑定
- 40.验证哥德巴赫猜想:一个大于2的偶数总可以分解成两个素数的和
- 所谓哥德巴赫猜想是说任何一个大于2的偶数都能表示为两个素数之和。
- 编程验证哥德巴赫猜想:任意一个充分大的偶数,可以用两个素数之和表示。如: 4 = 2 + 2 6 = 3 + 3。 **输入格式要求:"%d" 提示信息:"Input a number:\n"
- 分解质因数: 每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数
- linux终端下,使用ls时,显示的文件颜色,都表示什么含义,在哪里可以查看和修改