zcmu--1343: 素數對(素數篩)
阿新 • • 發佈:2018-12-09
素數篩:思想是去除要求範圍內所有的合數,剩下的就是素數了,而任何合數都可以表示為素數的乘積,因此如果已知一個數為素數,則它的倍數都為合數。
1343: 素數對
Time Limit: 1 Sec Memory Limit: 128 MB Submit: 762 Solved: 203 [Submit][Status][Web Board]
Description
輸入一個正整數n,求有幾對素數x,y,滿足n=x+y((3,2)和(2,3)視為相同的素數對)。
Input
有多組資料,每行輸入一個偶整數n(3<n<32768)。n等於0時,輸入結束。
Output
輸出相應的答案。
Sample Input
6 10 12 0
Sample Output
1 2 1
【分析】普通求素數的話會超時。所以用篩法求素數。即先假設所有的數都是素數,然後遍歷的時候,因為素數的倍數都不是素數來進行篩選。
【程式碼】
#include<iostream> #include<cstring> #include<cstdio> #include<string> #include<vector> #include<algorithm> using namespace std; int a[32780]; int main() { int n,i,j; memset(a,0,sizeof(a)); for(i=2;i<32780;i++) for(j=i*2;j<32780;j+=i) a[j]++; while(~scanf("%d",&n)&&n) { int cnt=0; for(i=2;i<=n/2;i++) { if(a[i]==0&&a[n-i]==0) cnt++; } printf("%d\n",cnt); } return 0; }