【蓝桥杯BASIC-16】分解质因数 Java版

基础练习 分解质因数

资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
  求出区间[a,b]中所有整数的质因数分解。
输入格式
  输入两个整数a,b。
输出格式
  每行输出一个数的分解,形如k=a1a2a3…(a1<=a2<=a3…,k也是从小到大的)(具体可看样例)
样例输入
3 10
样例输出
3=3
4=2*2
5=5
6=2*3
7=7
8=2*2*2
9=3*3
10=2*5
提示
  先筛出所有素数,然后再分解。
数据规模和约定
  2<=a<=b<=10000

分析

“分解质因数” 是找出哪些质数乘起来的积是等于原来的数。

一些例子:

例子 1: 12 的质因子是什么?
最好是从最小的质数开始。最小的质数是 2。我们看看:

12 ÷ 2 = 6

12 可以被 2 整除。 第一步完成了!

但 6 不是质数,所以还没做完。再试试 2 :

6 ÷ 2 = 3

3 是质数,所以有答案了:

12 = 2 × 2 × 3

你可以看到,每个因子都是质数,所以答案是对的。

例子 2: 147 的质因子是什么?
147 除以 2 的结果是整数而没有余数吗?

147 ÷ 2 = 73½

不是。73½ 不是整数。

试下一个质数,3:

147 ÷ 3 = 49

行了。接下来我们分解 49 为因子,结果是 7 为最小的可以整除 49 的质数 :

49 ÷ 7 = 7

我们不用再做下去了,因为所有的因子都是质数。

147 = 3 × 7 × 7

例子 3: 17 的质因子是什么?
17 是个质数。

所以不能做下去了。

17 = 17

Java 代码:

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String[] s = in.readLine().split(" ");
        int n = Integer.parseInt(s[0]);
        int m = Integer.parseInt(s[1]);
		
		// 存放分解后的质因数集
        ArrayList<Integer> a;

        for (int i = n; i <= m; i++) {
            a = new ArrayList<>();
            int j = i;
            int x = 2;
            while (!isPrime(j)) {
                if (j % x == 0) {
                    j = j / x;
                    a.add(x);
                } else if (j % x != 0) {
                    while (true) {
                        x++;
                        if (isPrime(x))
                            break;
                    }
                }
            }
            a.add(j);
            String result = String.valueOf(a.get(0));
            for (int k = 1; k < a.size(); k++) {
                result = result + "*" + a.get(k);
            }
            System.out.println(i + "=" + result);
        }
    }

	// 判断是否为质数
    public static boolean isPrime(int n) {
        for (int i = 2; i < n; i++) {
            if (n % i == 0)
                return false;
        }
        return true;
    }
}
发布了34 篇原创文章 · 获赞 18 · 访问量 2934

猜你喜欢

转载自blog.csdn.net/weixin_40608613/article/details/104149612