蓝桥杯 [BASIC-16] 分解质因数

基础练习 分解质因数

时间限制:1.0s   内存限制:512.0MB

问题描述

求出区间[a,b]中所有整数的质因数分解。

输入格式

输入两个整数a,b。

输出格式

每行输出一个数的分解,形如k=a1*a2*a3...(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、如提示所言,先筛出所有素数,然后再分解。

2、“筛法求素数”的思想及方法,可以参看我的另外一篇博客:筛法求素数

算法代码

import java.util.Scanner;

public class Main {

    static final int CONSTANT = 10000;
    static final int[] ARRAY = new int[CONSTANT + 1];
    static int[] primes = new int[1229];

    static {
        createPrimes();
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            int a = scanner.nextInt();
            int b = scanner.nextInt();
            primeFactors(a, b);
        }
    }

    private static void primeFactors(int a, int b) {
        for (; a <= b; a++) {
            int temp = a;
            System.out.print(a + "=");
            int i = 0;
            while (temp != 1) {
                if (temp % primes[i] == 0) {
                    temp /= primes[i];
                    System.out.print(primes[i]);
                    System.out.print(temp == 1 ? "\r\n" : "*");
                } else {
                    i++;
                }
            }
        }
    }

    private static void createPrimes() {
        for (int i = 2; i <= CONSTANT; i++) {
            if (ARRAY[i] == 0) {
                for (int j = i * 2; j <= CONSTANT; j += i) {
                    ARRAY[j] = 1;
                }
            }
        }
        int k = 0;
        for (int i = 2; i <= CONSTANT; i++) {
            if (ARRAY[i] == 0) {
                primes[k++] = i;
            }
        }
    }

}

 

你可能感兴趣的:(蓝桥杯,BASIC-16,分解质因数,算法,蓝桥杯,Java)