题目链接:点击打开链接
注意超时问题,因为题目给出数据较大
分拆素数和
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 38931 Accepted Submission(s): 17021
Problem Description
把一个偶数拆成两个不同素数的和,有几种拆法呢?
Input
输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。
Output
对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。
Sample Input
30 26 0
Sample Output
3 2/* 打表技术:先找出10000以内的素数 */ import java.util.*; class Main{ public static void main(String args[]){ Scanner sc=new Scanner(System.in); //素数打表 boolean a[]=new boolean[10001]; a[1]=false; a[2]=true; for(int i=3;i<=10000;i++){ a[i]=true; } for(int i=2;i<=10000;i++){ for(int j=2*i;j<=10000;j+=i){ a[j]=false; } } while(sc.hasNext()){ int n=sc.nextInt(); if(n==0){ break; } int sum=0; for(int i=2;i<=n/2;i++){ if(a[i]&&a[n-i]){ sum++; } } if(n%2==0&&a[n/2]){ sum--; } System.out.println(sum); } } }