1. 程式人生 > >zcmu--1343: 素數對(素數篩)

zcmu--1343: 素數對(素數篩)

素數篩:思想是去除要求範圍內所有的合數,剩下的就是素數了,而任何合數都可以表示為素數的乘積,因此如果已知一個數為素數,則它的倍數都為合數。 

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;
}