public static void main(String[] args) {
for(int i=0i<10i++) {
int a=(int)(Math.random()*99+1)
int b=(int)(Math.random()*99+1)
System.out.println(a+","+b+"\t=>\t"+getNumber(a,b))
}
}
public static int getNumber(int m,int n){
if (m % n == 0) {
return n
}
else {
return getNumber(n,m % n)
}
}
}
三种算法://欧几里得算法(辗转相除):
public static int gcd(int m,int n) {
if(m<n) {
int k=m
m=n
n=k
}
//if(m%n!=0) {
//m=m%n
//return gcd(m,n)
//}
//return n
return m%n == 0?n:gcd(n,m%n)
}
//连续整数检测算法:
public static int gcd1(int m,int n) {
int t
if(m<n) {
t=m
}else {
t=n
}
while(m%t!=0||n%t!=0){
t--
}
return t
}
//公因数法:(更相减损)
public static int gcd2(int m,int n) {
int i=0,t,x
while(m%2==0&n%2==0) {
m/=2
n/=2
i++
}
if(m<n){
t=m
m=n
n=t
}
while(n!=(m-n)) {
x=m-n
m=(n>x)?n:x
n=(n<x)?n:x
}
if(i==0)
return n
else
return (int)Math.pow(2, i)*n
}
public static void main(String[] args) {
System.out.println("请输入两个正整数:")
Scanner scan = new Scanner(System.in)
Scanner scan2=new Scanner(System.in)
int m=scan.nextInt()
int n=scan2.nextInt()
System.out.println("欧几里得算法求最大公约数是:"+gcd(m,n))
System.out.println("连续整数检测算法求最大公约数是:"+gcd1(m,n))
System.out.println("公因数法求最大公约数是:"+gcd2(m,n))
}
}
最大公约数求的没问题。求最小公倍数的时候,return (a*b)/m这句代码中的a和b的值已经在父类代码中被
do {
temp_number = a%b
a=b
b=temp_number
}
修改了,所以最终a*b就是0了。
改正:
class Son extends Father{
int m
int x
int y
Son(int a,int b)
{
x=a
y=b
super(a,b)
}
public int f(){
m=super.f()
return (x*y)/m
}
}
这样应该就行了