1. An integer is said to be prime, if it is divisible by exactly two different integers. First few primes are 2, 3, 5, 7, 11, 13, ...ios
題意:給你一個n,找出有多少組 兩個素數的和等於n;express
直接從1到n/2遍歷的話會超時。因此遍歷全部的素數找n-p[i]是否爲素數。this
#include<map> #include<stack> #include<queue> #include<math.h> #include<vector> #include<string> #include<stdio.h> #include<iostream> #include<string.h> #include<algorithm> #define mem(a,b) memset(a,b,sizeof(a)) #define maxn 10000001 #define maxm 1000000000005 #define mod 1000000007 #define ll long long #define inf 0x3f3f3f3f using namespace std; bool vis[maxn]; int p[1000000]; int tot; void getp(){ tot=0; mem(vis,true); vis[1]=vis[0]=false; for(ll i=2;i<=maxn;i++){ if(vis[i]){ p[tot++]=i; for(ll j=i*i;j<=maxn;j+=i)vis[j]=false; } } } int main(){ getp(); int t,test=0;scanf("%d",&t); while(t--){ int x;scanf("%d",&x); int ans=0; for(int i=0;i<tot&&p[i]<=x/2;i++){ if(vis[x-p[i]]) ans++; } printf("Case %d: %d\n",++test,ans); } }