蓝桥杯试题 基础练习-质因数分解 java代码

蓝桥杯试题 基础练习-质因数分解 java代码

一段运行比较快的代码(对于素数筛选采用埃式筛法)

package LanQiaoTest;

import java.util.Scanner;

public class TestLanQiao17 {
    //创建输入和最大最小值
    static Scanner input = new Scanner(System.in);
    static int min = input.nextInt();
    static int max = input.nextInt();
    //从0开始所以数组范围要加1
    static boolean[] notprime = new boolean[max + 1];

    public static void main(String[] args) {
        //获取开始时间
        long startTime = System.currentTimeMillis();

        //设置0和1的布尔值
        notprime[0] = true;
        notprime[1] = true;

        //筛出非素数
        for (int i = 2; i <= Math.sqrt(notprime.length); i++) {
            if (!notprime[i] ) {
                for (int j = i * 2; j <= max; j += i) {
                    notprime[j] = true;
                }
            }
        }

        //开始计算
        for (int i = min; i <= max; i++) {
            //输出素数
            if (!notprime[i])
                System.out.println(i);
            else {
                //输出非素数的质因数解
                for (int j = 2; j < i; j++) {
                    if (i % j == 0 && !notprime[j] && !notprime[i / j]) {
                        System.out.println(i + "=" + j + "*" + i / j);
                        break;
                    } else {
                        System.out.print(i + "=");
                        fenjie(i);
                        System.out.println();
                        break;
                    }
                }
            }
        }

        long endTime = System.currentTimeMillis();
        System.out.println("共花费了:"+(endTime-startTime)+"ms");
    }

    //构造分解方法,对由多个素数组成的数进行分解
    public static void fenjie(int n) {
        for (int i = 2; i <= n; i++) {
            if (n % i == 0) {
                if(n/i!=1) {//n/i!=1则还存在其他质因数
                    System.out.print(i + "*");
                    fenjie(n / i);
                    break;
                }else {//当n/i==1时输出最后一位i
                    System.out.print(i);
                }
            }
        }
    }

}

这段代码的运行结果

网上查找到相同题目代码的运行结果

这段代码的十万个数运行结果

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值