今天推荐:纯音乐——《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。
算术基本定理的解法
- 输入n,如n=90
- 求出小于n的所有质数pures(从小到大排序)
- k为pures最小值
- 如果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)的最大公约数:
- 输入a和b,result=1;
- 求出小于a和b的所有质数pures(从小到大排序)
- k为pures最小值
- 如果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。
- 输出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);
}
}
最小公倍数:
- 先求a和b的最大公约数c
- a=a/c;b=b/c
- 最大公倍数=a*b*c
例子:6和8,最大公约数为2,最小公倍数24=(6/2)*(8/2)*2=3*4*2
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。