1

今天推荐:纯音乐——《Greensleeves》

基本概念

质数

质数(素数)定义为在大于1的自然数中,除了1和它本身以外不再有其他因数的数。如2,3,5,7,11等等。

因数

如果a%b==0,则b是a的一个因数。

质因数

如果b是a的一个因数,同时b是一个质数,则b是a的一个质因数。

算术基本定理

算术基本定理,也称质因数分解定理:任何一个大于1的自然数 N,如果N不为质数,那么N可以唯一分解成有限个质数的乘积,注意,具备唯一性。如90=2*2*3*5。

算术基本定理的解法

  1. 输入n,如n=90
  2. 求出小于n的所有质数pures(从小到大排序)
  3. k为pures最小值
  4. 如果n==1,结束;如果n%k==0,则把k加入乘法等式,n=n/k,重复步骤4;否则k=pures中大于k的最小值。

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int n=90;
        int []pures= {2,3,5,7,11,13,17,23};
        int num=0;
        for(int k=0;k<pures.length;) {
            if(n==1) break;
            if(n%pures[k]==0) {
                n=n/pures[k];
                if(num==0) {
                    System.out.print(pures[k]);
                }else {
                    System.out.print("*"+pures[k]);
                }
                num++;
            }
            else {
                k++;
            }
        }
    }

}

总结

质因数分解可以用来求最大公约数和最小公倍数。

最大公约数

如果质数k能同时整除a和b,则k是最大公约数的质因数分解式的一部分

求两个数(a和b)的最大公约数:

  1. 输入a和b,result=1;
  2. 求出小于a和b的所有质数pures(从小到大排序)
  3. k为pures最小值
  4. 如果k>pures.length-1,结束;如果a%pures[k]==0且b%pures[k]==0,则把pures[k]加入乘法等式(result*=pures[k]),a=a/pures[k],b=b/pures[k],重复步骤4;否则k++,重复步骤4。
  5. 输出result
public class Main {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int a=60,b=24;  //最大公约数12
        int []pures= {2,3,5,7,11,13,17,23};
        int result=1;
        for(int k=0;k<pures.length;) {
            if(a%pures[k]==0&&b%pures[k]==0) {
                result=result*pures[k];
                a/=pures[k];
                b/=pures[k];
            }
            else {
                k++;
            }
        }
        System.out.println(result);
    }
}

最小公倍数:

  1. 先求a和b的最大公约数c
  2. a=a/c;b=b/c
  3. 最大公倍数=a*b*c

例子:6和8,最大公约数为2,最小公倍数24=(6/2)*(8/2)*2=3*4*2


曾纪文
201 声望22 粉丝