Java語言實驗——最小公倍數和最大公約數 SDUT OJ1181

Java語言實驗——最小公倍數和最大公約數  SDUT  OJ1181 

Time Limit: 1000 ms Memory Limit: 65536 KiB

Submit Statistic Discuss

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);  
}  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章