Java实现1000以内组合素数判断-结合文件操作

1万以内的所有素数判断这些素数中哪些是由素数拼接而成的。
    例如素数23就符合条件,23本身是素数,其由素数2,和素数3拼接(连接)组成。
    素数29就不满足条件,2是素数,而9不是素数。素数307不满足条件,不能忽略0. 

    7907这个素数符合条件,7是素数,907是素数。

该算法不但实现了判断输出基本功能,还实现了输出所有组合方式的功能。

至于算法中用到的prime.txt以及生成方法参见我的上一篇博文

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayDeque;
import java.util.Queue;

import com.zputil.*;

public class JoinPrime {
    private static Queue<Integer> queue = new ArrayDeque<>();


    public static void main(String[] args) throws Exception {
        int num = 0;
        File file = new File("prime.txt");
        if (file.exists() && file.isFile()) {
            System.out.println("找到该文件");

        } else {
            throw new Exception("找不到文件");
        }
        FileReader fileReader = new FileReader(file);
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        String ss = null;
        while ((ss = bufferedReader.readLine()) != null) {
            if (isJoinPrime(ss)) {

                System.out.print(ss + " : ");

                while (queue.size() != 0) {

                    if (queue.element() == -1) {
                        System.out.print("/");
                        queue.poll();
                    }
                    System.out.print(queue.poll() + " ");

                }
                System.out.println();
                num++;
            }
        }
        System.out.println("组合素数的个数为:" + num);

    }




    private static boolean isJoinPrime(String ss) {
        boolean b = false;
        switch (ss.length()) {
            case 1:
                break;
            case 2:
                if ((PrimeNum.isPrime(Integer.parseInt(ss.substring(0, 1)))) && (PrimeNum.isPrime(Integer.parseInt(ss.substring(1, 2)))) && (ss.indexOf('0') != 1)) {

                    queue.add(Integer.parseInt(ss.substring(0, 1)));
                    queue.add(Integer.parseInt(ss.substring(1, 2)));

                    b = true;

                }
                break;
            case 3:
                if ((PrimeNum.isPrime(Integer.parseInt(ss.substring(0, 1)))) && (PrimeNum.isPrime(Integer.parseInt(ss.substring(1, 2))))
                        && (PrimeNum.isPrime(Integer.parseInt(ss.substring(2, 3))))&& ((ss.indexOf('0')) == -1)) {
                    queue.add(Integer.parseInt(ss.substring(0, 1)));
                    queue.add(Integer.parseInt(ss.substring(1, 2)));
                    queue.add(Integer.parseInt(ss.substring(2, 3)));
                    if (b) queue.add(-1);
                    b = true;

                }
                if ((PrimeNum.isPrime(Integer.parseInt(ss.substring(0, 1)))) && (PrimeNum.isPrime(Integer.parseInt(ss.substring(1, 3))))
                        && (ss.indexOf('0') != 1)) {
                    if (b) queue.add(-1);
                    queue.add(Integer.parseInt(ss.substring(0, 1)));
                    queue.add(Integer.parseInt(ss.substring(1, 3)));
                    b = true;
                }
                if ((PrimeNum.isPrime(Integer.parseInt(ss.substring(0, 2)))) && (PrimeNum.isPrime(Integer.parseInt(ss.substring(2, 3))))
                        && (ss.indexOf('0') != 2)) {
                    if (b) queue.add(-1);
                    queue.add(Integer.parseInt(ss.substring(0, 2)));
                    queue.add(Integer.parseInt(ss.substring(2, 3)));
                    b = true;
                }
                break;
            case 4:
                if ((PrimeNum.isPrime(Integer.parseInt(ss.substring(0, 1)))) && (PrimeNum.isPrime(Integer.parseInt(ss.substring(1, 2))))
                        && (PrimeNum.isPrime(Integer.parseInt(ss.substring(2, 3))))&& (PrimeNum.isPrime(Integer.parseInt(ss.substring(3, 4))))&& ((ss.indexOf('0')) == -1)) {
                    queue.add(Integer.parseInt(ss.substring(0, 1)));
                    queue.add(Integer.parseInt(ss.substring(1, 2)));
                    queue.add(Integer.parseInt(ss.substring(2, 3)));
                    queue.add(Integer.parseInt(ss.substring(3, 4)));
                    b = true;

                }
                if ((PrimeNum.isPrime(Integer.parseInt(ss.substring(0, 2)))) && (PrimeNum.isPrime(Integer.parseInt(ss.substring(2, 3))))
                        && (PrimeNum.isPrime(Integer.parseInt(ss.substring(3, 4))))&& (ss.indexOf('0') != 2)&& (ss.indexOf('0') != 3)) {
                    if (b) queue.add(-1);
                    queue.add(Integer.parseInt(ss.substring(0, 2)));
                    queue.add(Integer.parseInt(ss.substring(2, 3)));
                    queue.add(Integer.parseInt(ss.substring(3, 4)));
                    b = true;
                }
                if ((PrimeNum.isPrime(Integer.parseInt(ss.substring(0, 1)))) && (PrimeNum.isPrime(Integer.parseInt(ss.substring(1, 3))))
                        && (PrimeNum.isPrime(Integer.parseInt(ss.substring(3, 4))))&& (ss.indexOf('0') != 1)&& (ss.indexOf('0') != 3)) {
                    if (b) queue.add(-1);
                    queue.add(Integer.parseInt(ss.substring(0, 1)));
                    queue.add(Integer.parseInt(ss.substring(1, 3)));
                    queue.add(Integer.parseInt(ss.substring(3, 4)));
                    b = true;
                }
                if ((PrimeNum.isPrime(Integer.parseInt(ss.substring(0, 1)))) && (PrimeNum.isPrime(Integer.parseInt(ss.substring(1, 2))))
                        && (PrimeNum.isPrime(Integer.parseInt(ss.substring(2, 4))))&& (ss.indexOf('0') != 2)&& (ss.indexOf('0') != 1)) {
                    if (b) queue.add(-1);
                    queue.add(Integer.parseInt(ss.substring(0, 1)));
                    queue.add(Integer.parseInt(ss.substring(1, 2)));
                    queue.add(Integer.parseInt(ss.substring(2, 4)));
                    b = true;
                }
                if ((PrimeNum.isPrime(Integer.parseInt(ss.substring(0, 3)))) && (PrimeNum.isPrime(Integer.parseInt(ss.substring(3, 4))))
                        && (ss.indexOf('0') != 3)) {
                    if (b) queue.add(-1);
                    queue.add(Integer.parseInt(ss.substring(0, 3)));
                    queue.add(Integer.parseInt(ss.substring(3, 4)));
                    b = true;
                }
                if ((PrimeNum.isPrime(Integer.parseInt(ss.substring(0, 1)))) && (PrimeNum.isPrime(Integer.parseInt(ss.substring(1, 4))))
                        && (ss.indexOf('0') != 1)) {
                    if (b) queue.add(-1);
                    queue.add(Integer.parseInt(ss.substring(0, 1)));
                    queue.add(Integer.parseInt(ss.substring(1, 4)));
                    b = true;
                }
                if ((PrimeNum.isPrime(Integer.parseInt(ss.substring(0, 2)))) && (PrimeNum.isPrime(Integer.parseInt(ss.substring(2, 4))))
                        && (ss.indexOf('0') != 2)) {
                    if (b) queue.add(-1);
                    queue.add(Integer.parseInt(ss.substring(0, 2)));
                    queue.add(Integer.parseInt(ss.substring(2, 4)));
                    b = true;
                }
                break;

        }
        return b;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值