Java語言實驗——最小公倍數和最大公約數 SDUT OJ1181
Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description
從鍵盤輸入兩個正整數,求這兩個正整數的最小公倍數和最大公約數,並輸出。
Input
輸入包括一行。
兩個以空格分開的正整數。
Output
兩個整數的最小公倍數和最大公約數。
Sample Input
6 8
Sample Output
24 2
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner reader = new Scanner(System.in);
int m, n, l, k;
m = reader.nextInt();
n = reader.nextInt();
k = gcd(m,n);
l = m*n/k;
System.out.println(l + " " + k);
reader.close();
}
private static int gcd(int m, int n)
{//輾轉相除法
int r = 0;
while((r=m%n) != 0)
{
m = n;
n = r;
}
return n;
}
}
最小公倍數、最大公約數的算法和輾轉相除法:
https://blog.csdn.net/xx326664162/article/details/51463006
節選:
求最小公倍數算法:
最小公倍數:數論中的一種概念,兩個整數公有的倍數成爲他們的公倍數,其中一個最小的公倍數是他們的最小公倍數,同樣地,若干個整數公有的倍數中最小的正整數稱爲它們的最小公倍數
最小公倍數=兩整數的乘積÷最大公約數
證明的話,我可能寫法不會太嚴謹,還是舉個栗子吧:
求最小公倍數的常規方法:
首先把兩個數的質因數寫出來,最小公倍數等於它們所有的質因數的乘積(如果有質因數相同,則除去相同的質因數一次)。
比如求45和30的最小公倍數。
45=3*3*5
30=2*3*5
最小公倍數等於2*3*3*5=90,用最大公約數15(3*5)乘以各自的其他部分的質因數(2和3),既保障數字是最小的,也保障是他們共同的倍數
所以最小公倍數也可以表示爲:3*3*5*2*3*5÷3*5 = 90
求最大公約數算法:
最小公約數:兩個整數公有的約數成爲他們的公約數,其中一個最大的公約數是他們的最大公約數
輾轉相除法
1、用除法實現輾轉相除法:
有兩整數a和b:
① a%b得餘數c
② 若c=0,則b即爲兩數的最大公約數
③ 若c≠0,則a=b,b=c,再回去執行①
例如求27和15的最大公約數過程爲:
27÷15 餘1215÷12餘312÷3餘0因此,3即爲最大公約數
C語言描述:
void main() /* 輾轉相除法求最大公約數 */
{
int m, n, a, b, t, c;
printf("Input two integer numbers:\n");
scanf("%d%d", &a, &b);
m=a; n=b;
while(b!=0) /* 餘數不爲0,繼續相除,直到餘數爲0 */
{ c=a%b; a=b; b=c;}
printf("The largest common divisor:%d\n", a);
printf("The least common multiple:%d\n", m*n/a);
}