蓝桥杯试题 基础练习-质因数分解 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);
}
}
}
}
}
这段代码的运行结果
网上查找到相同题目代码的运行结果
这段代码的十万个数运行结果