LightOJ 1259 Goldbach`s Conjecture 素数打表
Posted 声声醉如兰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LightOJ 1259 Goldbach`s Conjecture 素数打表相关的知识,希望对你有一定的参考价值。
题目大意:求讲一个整数n分解为两个素数的方案数。
题目思路:素数打表,后遍历 1-n/2,寻找方案数,需要注意的是:C/C++中 bool类型占用一个字节,int类型占用4个字节,在素数打表中采用bool类型可以节约不少内存。
#include<iostream> #include<algorithm> #include<cstring> #include<vector> #include<stdio.h> #include<queue> #include<math.h> #define INF 0x3f3f3f3f #define MAX 10000005 #define Temp 10000005 using namespace std; int p[664589],cnt=0; bool vis[MAX]; void GetPrime()//素数打表 { memset(vis,false,sizeof(vis)); memset(p,0,sizeof(p)); for(int i=2;i<MAX;i++) { if(!vis[i]) { p[++cnt]=i; for(int j=i+i;j<MAX;j+=i) { vis[j]=true; } } } } int main() { GetPrime(); int n,T,sum,cns=0; scanf("%d",&T); while(T--) { sum=0; scanf("%d",&n); for(int i=1;p[i]<=n/2;i++)//遍历寻找方案数 { if(vis[n-p[i]]==false) sum++; } printf("Case %d: %d\n",++cns,sum); } return 0; }
以上是关于LightOJ 1259 Goldbach`s Conjecture 素数打表的主要内容,如果未能解决你的问题,请参考以下文章
Goldbach`s Conjecture LightOJ - 1259 (素数打表 哥德巴赫猜想)
hdu1397(Goldbach`s Conjecture )