package com.leetcode.maxdivisor;
import java.util.Scanner;
/**
* 求两个正整数的最大公约数。
* 辗转相除法
* 假设用f(x,y)表示x与y的最大公约数,
* 取k=x/y,b=x%y,则x=ky+b,
* 如果一个数能够同时整除x和y,则必能同时整除b和y;
* 比如 3*8=24;
* 8=2*3+2;
* x=k*y+b;
* 所以x和y的公约数与 b和y的公约数是相同的。
* 其最大公约数也是相同的。
* 则有f(x,y)=f(b,y)=f(x%y,y)
*
*
*/
public class Maxdivisor {
public static void main(String[] args) {
System.out.println("请输入第一个正数:");
Scanner s1=new Scanner(System.in);
int one=s1.nextInt();
System.out.println("请输入第二个正数:");
Scanner s2=new Scanner(System.in);
int two=s2.nextInt();
int max=Comondivisor(one,two);
System.out.println("两数中的最大公约数为:"+max);
}
private static int Comondivisor(int one, int two) {
int max=(two==0)?one:Comondivisor(two, one%two);
return max;
}
}
求两个正整数的最大公约数
最新推荐文章于 2022-01-11 12:49:57 发布