【十九】Java编程之分解质因素

版权声明:转载注明出处 https://blog.csdn.net/jy02268879/article/details/81675608

质因数百度百科解释

质因数素因数质因子)在数论里是指能整除给定正整数质数。除了1以外,两个没有其他共同质因子的正整数称为互质。因为1没有质因子,1与任何正整数(包括1本身)都是互质。正整数的因数分解可将正整数表示为一连串的质因子相乘,质因子如重复可以用指数表示。根据算术基本定理,任何正整数皆有独一无二的质因子分解式 [1]  。只有一个质因子的正整数为质数。

每个合数都可以写成几个质数(也可称为素数)相乘的形式 [2]  ,这几个质数就都叫做这个合数的质因数。如果一个质数是某个数的因数,那么就说这个质数是这个数的质因数;而这个因数一定是一个质数。

例子

  • 1没有质因子。

  • 5只有1个质因子,5本身。(5是质数)

  • 6的质因子是2和3。(6 = 2 × 3)

  • 2、4、8、16等只有1个质因子:2。(2是质数,4 =2²,8 = 2³,如此类推)

  • 10有2个质因子:2和5。(10 = 2 × 5)

基本信息

质因数 [3]  就是一个数的约数,并且是质数。

比如8=2×2×2,2就是8的质因数;

12=2×2×3,2和3就是12的质因数。

把一个式子以12=2×2×3的形式表示,叫做分解质因数

把一个合数写成几个质数相乘的形式表示,这也是分解质因数 [4]  ,如16=2×2×2×2,2就是16的质因数。

把一个合数分解成若干个质因数的乘积的形式,即求质因数的过程叫做分解质因数。

分解质因数只针对合数。(分解质因数也称分解素因数)求一个数分解质因数,要从最小的质数除起,一直除到结果为质数为止。

分解质因数的方法是先用一个合数的最小质因数去除这个合数,得出的数若是一个质数,就写成这个合数相乘形式;若是一个合数就继续按原来的方法,直至最后是一个质数 。

分解质因数的有两种表示方法,除了最常用的“短除分解法”之外,还有一种方法就是“塔形分解法”。

分解质因数对解决一些自然数和乘积的问题有很大的帮助,同时又为求最大公约数最小公倍数做了重要的铺垫。

import java.util.Scanner;

/**
 * 因式分解
 * 找出正整数的质因数
 * 强调,质因数一定是个素数!
 * 比如9、15就不是135质因数,它还能再拆分
 * 9=3*3
 * 15=3*5
 *
 * 结果要写成 正整数=质数*质数*质数*质数*质数*质数*质数*质数...的形式
 * */
public class PrimeFactors {
    public static StringBuilder sb;
    public static void main(String[] args) {
        System.out.println("请输入一个正整数");
        Scanner s = new Scanner(System.in);
        int n = s.nextInt();
        sb = new StringBuilder();
        sb.append(n).append("=");
        factor(n);
        sb.deleteCharAt(sb.length()-1);
        System.out.println(sb.toString());
    }

    //进行因式分解
    public static void factor(int number) {
        for (int i = 2; i < number; i++) {
            //能整除
            if (number % i == 0) {
                sb.append(i).append("*");

                if(isPrime(number / i)){
                    sb.append(number / i).append("*");
                }else {
                    factor(number / i);
                }
                break;
            }
        }

    }

    //判断是否为素数
    public static boolean isPrime(int number) {
        for (int i = 2; i < number; i++) {
            if (number % i == 0) {
                //number不是素数
                return false;
            }
        }
        return true;
    }
}

猜你喜欢

转载自blog.csdn.net/jy02268879/article/details/81675608