1. 程式人生 > >求n個數的最小公倍數

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