程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> [hdu 2028] Lowest Common Multiple Plus

[hdu 2028] Lowest Common Multiple Plus

編輯:C++入門知識

Lowest Common Multiple Plus

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 30977 Accepted Submission(s): 12566


Problem Description 求n個數的最小公倍數。
Input 輸入包含多個測試實例,每個測試實例的開始是一個正整數n,然後是n個正整數。
Output 為每組測試數據輸出它們的最小公倍數,每個測試實例的輸出占一行。你可以假設最後的輸出是一個32位的整數。
Sample Input
2 4 6
3 2 5 7

Sample Output
12
70

分析:兩個數的最小公倍數 lcm( x , y ) = x * y / gcd( x , y )。其中 gcd() 是這兩個數的最大公約數,可以采用“輾轉相除法”求解。所以這題的關鍵是求最大公約數。

import java.util.Scanner;

public class Main {

	// 最大公約數
	static long gcd(long a, long b) {
		long remainder = a % b;
		while (remainder != 0) {
			a = b;
			b = remainder;
			remainder = a % b;
		}
		return b;
	}

	// 最小公倍數
	static long lcm(long a, long b) {
		return a * b / gcd(a, b);
	}

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);

		while (scanner.hasNext()) {
			int n = scanner.nextInt();

			long temp = 1;
			for (long i = 0; i < n; i++) {
				long num = scanner.nextLong();
				temp = lcm(temp, num);
			}

			System.out.println(temp);
		}
	}
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved