求n個數的最小公倍數
騰訊2018秋招筆試題(研發類),程式設計題第一題:
輸入:n
m為離n最近的整數,且m要滿足:
{n+1,n+2,...,m}的最小公倍數和{1,2,3,...,m}的最小公倍數相同。
輸出:m
import java.util.Arrays; import java.util.Scanner;
public class Tecent1 {
public static void main(String[] args) { Scanner input = new Scanner(System.in); int n = input.nextInt(); int m = 0; int i = 0; int[] right; int[] left; do { i++; m = n + i; int j = 0; right = new int[m]; left = new int[m - n]; while (j < m) { right[j] = j + 1; j++; } for (int p = 0; p < m - n ; p++) { left[p] = n + p + 1; } } while (lcmofarray(left,0,left.length) != lcmofarray(right,0,right.length)); System.out.println(m); }
//方法1:
/*public static int getLCM(int[] arr) { int max = 0; for (int i = 0; i < arr.length; i++) { if (max < arr[i]) { max = arr[i]; // 先找出這n個數的那個最大的數 } } for (int i = max;; i++) { boolean b = true; // 設定標記 for (int j = 0; j < arr.length; j++) { if (max % arr[j] != 0) { b = false; // 只要有一個數不能整除max則令標記為false } } max++; if (b) { // 如果標記為true說明該max可以整除這n個數 // 則max為最小公倍數 return max; // 跳出迴圈 } } }*/
//方法二: public static int gcd(int a, int b){ if (a<b) return gcd(b,a); if (a%b==0) return b; else return gcd(a, a%b); } public static int lcm(int a, int b){ return ((a*b)/gcd(a,b));
} public static int lcmofarray(int[] arr, int start, int end){ if ((end-start)==1) return lcm(arr[start],arr[end-1]); else return (lcm (arr[start], lcmofarray(arr, start+1, end))); } }