Problem Description
把一个偶数拆成两个不同素数的和,有几种拆法呢?
Input
输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。
Output
对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。
Sample Input
30
26
0
Sample Output
3
2
解题思路:先欧拉筛数然后在进行试探分析是否可以两个素数的和为这个偶数。
import java.util.Scanner; public class Test { public static void main(String[] args){ Scanner input = new Scanner(System.in); int count =0; int num = 100000; boolean[] bl = new boolean[100000000]; int[] primeList = new int[num]; for(int i =2;i < num;i++){ if(!bl[i]){ primeList[count++] = i; } for(int j =0;j < count;j++){ if(i*primeList[j] > num){ break; } bl[i*primeList[j]] = true; if(i%primeList[j]==0){ break; } } } for(;;){ int sum = input.nextInt(); if(sum ==0){ break; } int count1 =0; for(int i =2;i < sum/2;i++){ if(!bl[i]&&!bl[sum-i]){ if(i!=sum-i) count1++; System.out.println(i+" " +(sum-i)); } } System.out.println(count1); } } }