蓝桥杯刷题整理(七)分解质因数

 

问题描述:求出区间[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
提示:先筛出所有素数,然后再分解。

关键思路:

先筛选素数的话,因为不知道要求多少个素数,我用ArrayList来存素数,用两个循环来求素数(如果在素数线性表中存在一个素数,能被[a,b]范围内的某个数x取余==0,则x不为素数;剩下的为素数。

求完素数之后,考虑如何求一个数的质因数:如果该数能对线性表的某个数取余==0,说明该数可以分解;然后再考虑能否多次分解:如果一个数整除素数表里面的某一个数!=1且能继续分解,考虑用循环来求出所有的质因数。如果整除==1,该数本身为素数,则直接输出x=x。

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int a = in.nextInt();
		int b = in.nextInt();
		// 求素数
		ArrayList<Integer> arr = new ArrayList<>();
		arr.add(2);
		// 第一个赋值为2,接下来从三开始求出素数
		for (int i = 3; i <= b; i++) {
			// 设一个flag,如果为true,加入到线性列表中
			boolean flag = true;
			// 遍历,如果数组存在一个数,能被i求余等于0 ,则不是素数;如果不存在一个j,则i为素数
			for (int j : arr) {
				if (i % j == 0) {
					flag = false;
					break;
				}
			}
			if (flag) {
				arr.add(i);
			}
		}
		for (int i = a; i <= b; i++) {
			// i 8
			int temp = i;
			// 整数的质因数//我先输出一部分
			System.out.print(i + "=");
			for (int j = 0; j < arr.size(); j++) {
				/*
				 * 多考虑的情况: 4=2*2  3=3
				 */
				int pri = arr.get(j);
				if (temp % pri == 0) {
					int c = temp / pri;
					if (c != 1) {
						temp = c;
						System.out.print(pri + "*");
						j = -1;
						continue;
					} else {
						System.out.print(pri);
						break;
					}
				}
			}
			System.out.println();
		}
	}

}

 

发布了25 篇原创文章 · 获赞 16 · 访问量 360
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 书香水墨 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览