第一道白给,第二道考调api,第三道dp,没想出来咋dp贪心过了一半样例,遂放弃
求最大公约数最小公倍数
辗转相除法
两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数。
//a>b
public static int max(int a,int b){
int temp;
while(b!=0){
temp=a%b;
a=b;
b=temp;
}
return a;
}
//a>b
public static int max(int a,int b){
if(b==0) return a;
return max(b,a%b);
}
更相减损术
两个正整数a和b(a>b),它们的最大公约数等于a-b的差值c和较小数b的最大公约数。
public static int max(int a,int b){
if(a==b) return a;
if(a>b) return max(a-b,b);
else return max(b-a,a);
}
最小公倍数
两个数的乘积等于这两个数的最大公约数与最小公倍数的乘积。
分析:假设两个数为 a和b,他们的最大公约数是a/c,那么他们的最小公倍数为 (a/c) * a/(a/c) * b/(a/c)。化简后得: b*c
public static int min(int a,int b){
return a*b/max(a,b);
}
用到的api
二进制字符串转十进制整数用int包装类Integer中的parseInt方法,参数是字符串和2(指2进制)
整数转二进制,用整数包装类的toBinaryString方法
StringBuilder的insert方法,第一个参数指定位置,第二个指定要插入的东西