poj2262 Goldbach's Conjecture 素数的欧拉筛法
来源:互联网 发布:ubuntu kernel devel 编辑:程序博客网 时间:2024/06/01 08:56
题目链接:http://poj.org/problem?id=2262
思路:题意很简单。主要是用一般的素数判定方法速度很慢,据说会有TLE的风险。所以我先用欧拉筛法对 [ 2 , 1000000 ] 以内的素数进行打表。然后从2开始枚举每个素数a,直接通过打表得到的isPrime[ ]数组判断 n - a 是不是素数。
前几次用G++提交都是313MS,用C++提交了一次果断就141MS了 ^o^
///2014.7.16///poj2262//Accepted 1968K 313MS G++ 1415B 2014-07-16 21:19:52//Accepted 1444K 141MS C++ 1478B 2014-07-16 21:23:23#include <iostream>#include <cstring>#include <cstdio>#include <cmath>using namespace std;/*===================================================*\ 素数打表,该函数执行后 prim[]数组中存入[2,N]区间内的所有素数(从prim[0]开始存入) isPrime[i] 表示整数 i 是否为素数 函数返回[2,N]之间的素数的个数\*===================================================*/const int N = 1000000;bool isPrime[N+10];int prim[80000]; //要注意保证pirm[]数组足够存储[2,N]之间的素数int prime(){ int num = 0; memset(isPrime,true,sizeof(isPrime)); isPrime[0] = isPrime[1] = false; for(int i=2 ; i<=N ; i++){ if( isPrime[i] ) prim[num++] = i; for(int j=0 ; j<num ; j++){ if( i*prim[j]>N ) break; isPrime[ i*prim[j] ] = false; if( i%prim[j] == 0 ) break; } } return num;}int n;int main(){ // freopen("in","r",stdin); // freopen("out","w",stdout); int a,b; int numOfPrime = prime(); while( scanf("%d",&n) && n ){ bool findit = false; for(int i=0 ; i<numOfPrime && prim[i]<n ; i++){ a = prim[i]; b = n-a; if( isPrime[b] ){ findit = true; break; } } if( findit ) printf("%d = %d + %d\n",n,a,b ); else printf("Goldbach's conjecture is wrong.\n"); } return 0;}
0 0
- poj2262 Goldbach's Conjecture 素数的欧拉筛法
- POJ2262 Goldbach's Conjecture(素数问题)
- poj2262 Goldbach's Conjecture
- POJ2262 Goldbach's Conjecture
- POJ2262:Goldbach's Conjecture
- poj2262 Goldbach's Conjecture
- poj2262-Goldbach's Conjecture
- 【POJ2262】:Goldbach's Conjecture
- [POJ2262]Goldbach's Conjecture
- poj2262 Goldbach's Conjecture(线性素数筛+暴力枚举)
- 【数论】poj2262 Goldbach's Conjecture
- POJ2262 Goldbach's Conjecture(推荐)
- POJ2262 ZOJ1951 UVa543 Goldbach's Conjecture
- Goldbach`s Conjecture 素数筛选
- POJ2262,Goldbach's Conjecture,哥德巴赫猜想水过
- POJ 2262 Goldbach's Conjecture 简单的素数
- POJ Goldbach's Conjecture(素数筛~欧拉筛法)
- HDOJ 1397 Goldbach's Conjecture [爱沙托散筛法求素数]
- LeetCode:Implement strStr()
- android第三方登录以及第三方分享
- win8.1系统vs2013中boost 1.55.0的安装
- KMP算法
- 01背包(模板题) 之 poj 3624
- poj2262 Goldbach's Conjecture 素数的欧拉筛法
- 线程 同步 ConditionVariable-------特别使用在mediaplayer和camera多次调用中.
- 合并两个有序链表
- 山風蠱
- C语言实现的小项目 关机小程序
- 小白学jquery Mobile《构建跨平台APP:jQuery Mobile移动应用实战》连载三(整蛊小游戏)
- visual c++ 6.0的启动图标所在的目录
- 远程到服务器安装visualSVN server,出现Service 'VisualSVN Server' failed to start的解决方法
- c++构造函数详解