基础练习 分解质因数

  基础练习 分解质因数  
时间限制: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

import java.util.Scanner;
public class Main {
	//判断是否为质数(大于等于5的质数一定和6的倍数相邻。例如5和7,11和13,17和19等等;)
	public static boolean IsPrime(int n){
		//两个较小数另外处理  
		if(n==2||n==3)
			return true;
		//不在6的倍数两侧的一定不是质数 
		if(n%6!=1&&n%6!=5)
			return false;
		//在6的倍数两侧的也可能不是质数  
		int tmp =(int)Math.sqrt(n); 
//      我们通过对一个数进行从2到此数相除,只有1和它本身能除尽而其他数除不尽的数    来判断它是质数		
//		sqrt(n)表示求平方根,如果在sqrt(n)的左侧找不到约数(除得尽的数),那么在右侧也找不到
//           所以只需要遍历到sqrt(n)处;
//		因为大于等于5的质数一定和6的倍数相邻
//		所以6++快进,
        for(int i=5;i <=tmp; i+=6 )  
            if(n%i==0||n%(i+2)==0 )  
                       return false;
		return true;
	}
	


//  分解质因数
	public static void PrimeFctorization(int n){
        int m=n;
        int flag = 0;
        int[] array = new int[50];
//        如果不是质数  进行质数分解
        if(!IsPrime(n)){
        	for (int i = 2; i <= n; i++) {
	            if (n % i == 0) {
	            	array[flag] = i;
	                flag++;
	                n = n / i;
	                i--;
	            }
            }
	        if (flag > 1) {
	            System.out.print(m + "=" + array[0]);
	            for (int k = 1; k < flag; k++) 
	                System.out.print("*" + array[k]);
	        } 
        }
//如果是质数
        else
        	System.out.print(n + "=" + n);
	}
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        for(int i = n; i <= m; i++){
        	PrimeFctorization(i);
        	System.out.println();
        }
      
    }
}



关于质数的判断请参考: http://blog.csdn.net/huang_miao_xin/article/details/51331710


基础练习 分解质因数_第1张图片



你可能感兴趣的:(蓝桥杯)