InputAn integer is given in each input line. You may assume that each integer is even, and is greater than or equal to 4 and less than 2^15. The end of the input is indicated by a number 0.
OutputEach output line should contain an integer number. No other characters should appear in the output.
Sample Inputjava
6 10 12 0
Sample Outputapp
1 2 1
題意:給你一個大於等於4小於2^15的偶數,求有多少對素數知足n=p1+p2,不該將(p1,p2)和(p2,p1)分別計算爲兩個不一樣的對
線性歐拉篩
代碼:
import java.util.Scanner; public class Main { static final int max=34000; static int prime[]=new int[max]; static boolean is_prime[]=new boolean[max]; static int k=0; public static void Prime(){ is_prime[0]=is_prime[1]=true; for(int i=2;i<max;i++){ if(!is_prime[i]) prime[k++]=i; for(int j=0;j<k&&prime[j]*i<max;j++){ is_prime[i*prime[j]]=true; if(i%prime[j]==0) break; } } } public static void main(String[] args) { Prime(); Scanner scan=new Scanner(System.in); while(scan.hasNext()){ int n=scan.nextInt(); if(n==0) break; int cnt=0; for(int i=0;i<k&&prime[i]<=n/2;i++){ if(!is_prime[n-prime[i]]) cnt++; } System.out.println(cnt); } } }