HDU2098 分拆素数和

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

 

转载于:https://www.cnblogs.com/ke-T3022/p/8385311.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值