1 となるような数値 n が与えられると、<= N <= 10^6 the Task is to Find the LCM of First n Natural Numbers.
例:
Input : n = 5 Output : 60 Input : n = 6 Output : 60 Input : n = 7 Output : 420
解決策に進む前に、ここをクリックして練習することを強くお勧めします。
以下の記事で簡単な解決策について説明しました。
最初の n 個の数値で割り切れる最小の数値
上記の解決策は、単一の入力に対しては正常に機能します。ただし、複数の入力がある場合は、次のように使用することをお勧めします。 エラトステネスのふるい すべての素因数を保存します。ご存知のとおり、LCM(a b) = X であるため、a または b の素因数は「X」の素因数にもなります。
- lcm変数を1で初期化する
- 長さ 10^6 (理想的には階乗の桁数と等しくなければなりません) のエラトステネスのふるい (ブール ベクトル isPrime) を生成します。
- ここで、ブール ベクトル isPrime の各数値について、その数値が素数 (isPrime[i] が true) の場合、指定された数値より小さく、素数のべき乗に等しい最大数値を見つけます。
- 次に、この数値を lcm 変数で乗算します。
- 素数が指定された数より小さくなるまで、手順 3 と 4 を繰り返します。
図:
For example if n = 10 8 will be the first number which is equal to 2^3 then 9 which is equal to 3^2 then 5 which is equal to 5^1 then 7 which is equal to 7^1 Finally we multiply those numbers 8*9*5*7 = 2520
以下は上記のアイデアを実装したものです。
C++// C++ program to find LCM of First N Natural Numbers. #include #define MAX 100000 using namespace std; vector<bool> isPrime (MAX true); // utility function for sieve of sieve of Eratosthenes void sieve() { for (int i = 2; i * i <= MAX; i++) { if (isPrime[i] == true) for (int j = i*i; j<= MAX; j+=i) isPrime[j] = false; } } // Function to find LCM of first n Natural Numbers long long LCM(int n) { long long lcm = 1; int i=2; while(i<=n) { if(isPrime[i]){ int pp = i; while (pp * i <= n) pp = pp * i; lcm *= pp; } i++; } return lcm; } // Driver code int main() { // build sieve sieve(); int N = 7; // Function call cout << LCM(N); return 0; }
Java // Java program to find LCM of First N Natural Numbers. import java.util.*; class GFG { static int MAX = 100000; // array to store all prime less than and equal to 10^6 static ArrayList<Integer> primes = new ArrayList<Integer>(); // utility function for sieve of sieve of Eratosthenes static void sieve() { boolean[] isComposite = new boolean[MAX + 1]; for (int i = 2; i * i <= MAX; i++) { if (isComposite[i] == false) for (int j = 2; j * i <= MAX; j++) isComposite[i * j] = true; } // Store all prime numbers in vector primes[] for (int i = 2; i <= MAX; i++) if (isComposite[i] == false) primes.add(i); } // Function to find LCM of first n Natural Numbers static long LCM(int n) { long lcm = 1; for (int i = 0; i < primes.size() && primes.get(i) <= n; i++) { // Find the highest power of prime primes[i] // that is less than or equal to n int pp = primes.get(i); while (pp * primes.get(i) <= n) pp = pp * primes.get(i); // multiply lcm with highest power of prime[i] lcm *= pp; lcm %= 1000000007; } return lcm; } // Driver code public static void main(String[] args) { sieve(); int N = 7; // Function call System.out.println(LCM(N)); } } // This code is contributed by mits
Python3 # Python3 program to find LCM of # First N Natural Numbers. MAX = 100000 # array to store all prime less # than and equal to 10^6 primes = [] # utility function for # sieve of Eratosthenes def sieve(): isComposite = [False]*(MAX+1) i = 2 while (i * i <= MAX): if (isComposite[i] == False): j = 2 while (j * i <= MAX): isComposite[i * j] = True j += 1 i += 1 # Store all prime numbers in # vector primes[] for i in range(2 MAX+1): if (isComposite[i] == False): primes.append(i) # Function to find LCM of # first n Natural Numbers def LCM(n): lcm = 1 i = 0 while (i < len(primes) and primes[i] <= n): # Find the highest power of prime # primes[i] that is less than or # equal to n pp = primes[i] while (pp * primes[i] <= n): pp = pp * primes[i] # multiply lcm with highest # power of prime[i] lcm *= pp lcm %= 1000000007 i += 1 return lcm # Driver code sieve() N = 7 # Function call print(LCM(N)) # This code is contributed by mits
C# // C# program to find LCM of First N // Natural Numbers. using System.Collections; using System; class GFG { static int MAX = 100000; // array to store all prime less than // and equal to 10^6 static ArrayList primes = new ArrayList(); // utility function for sieve of // sieve of Eratosthenes static void sieve() { bool[] isComposite = new bool[MAX + 1]; for (int i = 2; i * i <= MAX; i++) { if (isComposite[i] == false) for (int j = 2; j * i <= MAX; j++) isComposite[i * j] = true; } // Store all prime numbers in vector primes[] for (int i = 2; i <= MAX; i++) if (isComposite[i] == false) primes.Add(i); } // Function to find LCM of first // n Natural Numbers static long LCM(int n) { long lcm = 1; for (int i = 0; i < primes.Count && (int)primes[i] <= n; i++) { // Find the highest power of prime primes[i] // that is less than or equal to n int pp = (int)primes[i]; while (pp * (int)primes[i] <= n) pp = pp * (int)primes[i]; // multiply lcm with highest power of prime[i] lcm *= pp; lcm %= 1000000007; } return lcm; } // Driver code public static void Main() { sieve(); int N = 7; // Function call Console.WriteLine(LCM(N)); } } // This code is contributed by mits
JavaScript <script> // Javascript program to find LCM of First N // Natural Numbers. let MAX = 100000; // array to store all prime less than // and equal to 10^6 let primes = []; // utility function for sieve of // sieve of Eratosthenes function sieve() { let isComposite = new Array(MAX + 1); isComposite.fill(false); for (let i = 2; i * i <= MAX; i++) { if (isComposite[i] == false) for (let j = 2; j * i <= MAX; j++) isComposite[i * j] = true; } // Store all prime numbers in vector primes[] for (let i = 2; i <= MAX; i++) if (isComposite[i] == false) primes.push(i); } // Function to find LCM of first // n Natural Numbers function LCM(n) { let lcm = 1; for (let i = 0; i < primes.length && primes[i] <= n; i++) { // Find the highest power of prime primes[i] // that is less than or equal to n let pp = primes[i]; while (pp * primes[i] <= n) pp = pp * primes[i]; // multiply lcm with highest power of prime[i] lcm *= pp; lcm %= 1000000007; } return lcm; } sieve(); let N = 7; // Function call document.write(LCM(N)); // This code is contributed by decode2207. </script>
PHP // PHP program to find LCM of // First N Natural Numbers. $MAX = 100000; // array to store all prime less // than and equal to 10^6 $primes = array(); // utility function for // sieve of Eratosthenes function sieve() { global $MAX $primes; $isComposite = array_fill(0 $MAX false); for ($i = 2; $i * $i <= $MAX; $i++) { if ($isComposite[$i] == false) for ($j = 2; $j * $i <= $MAX; $j++) $isComposite[$i * $j] = true; } // Store all prime numbers in // vector primes[] for ($i = 2; $i <= $MAX; $i++) if ($isComposite[$i] == false) array_push($primes $i); } // Function to find LCM of // first n Natural Numbers function LCM($n) { global $MAX $primes; $lcm = 1; for ($i = 0; $i < count($primes) && $primes[$i] <= $n; $i++) { // Find the highest power of prime // primes[i] that is less than or // equal to n $pp = $primes[$i]; while ($pp * $primes[$i] <= $n) $pp = $pp * $primes[$i]; // multiply lcm with highest // power of prime[i] $lcm *= $pp; $lcm %= 1000000007; } return $lcm; } // Driver code sieve(); $N = 7; // Function call echo LCM($N); // This code is contributed by mits ?> 出力
420
時間計算量 : の上2)
補助スペース: の上)
別のアプローチ:
この考え方は、数値が 3 未満の場合は数値を返すというものです。数値が 2 より大きい場合は、nn-1 の最小公倍数を求めます。
- x=LCM(nn-1) としましょう
- 再び x=LCM(xn-2)
- 再び x=LCM(xn-3) ...
- 。
- 。
- 再び x=LCM(x1) ...
今の結果は×です。
LCM(ab) を見つけるには、(ab) の HCF を返す関数 hcf(ab) を使用します。
私たちはそれを知っています LCM(ab)= (a*b)/HCF(ab)
図:
For example if n = 7 function call lcm(76) now lets say a=7 b=6 Now b!= 1 Hence a=lcm(76) = 42 and b=6-1=5 function call lcm(425) a=lcm(425) = 210 and b=5-1=4 function call lcm(2104) a=lcm(2104) = 420 and b=4-1=3 function call lcm(4203) a=lcm(4203) = 420 and b=3-1=2 function call lcm(4202) a=lcm(4202) = 420 and b=2-1=1 Now b=1 Hence return a=420
以下は上記のアプローチの実装です
C++// C++ program to find LCM of First N Natural Numbers. #include using namespace std; // to calculate hcf int hcf(int a int b) { if (b == 0) return a; return hcf(b a % b); } int findlcm(int aint b) { if (b == 1) // lcm(ab)=(a*b)/hcf(ab) return a; // assign a=lcm of nn-1 a = (a * b) / hcf(a b); // b=b-1 b -= 1; return findlcm(a b); } // Driver code int main() { int n = 7; if (n < 3) cout << n; // base case else // Function call // pass nn-1 in function to find LCM of first n natural // number cout << findlcm(n n - 1); return 0; } // contributed by ajaykr00kj
Java // Java program to find LCM of First N Natural Numbers public class Main { // to calculate hcf static int hcf(int a int b) { if (b == 0) return a; return hcf(b a % b); } static int findlcm(int aint b) { if (b == 1) // lcm(ab)=(a*b)/hcf(ab) return a; // assign a=lcm of nn-1 a = (a * b) / hcf(a b); // b=b-1 b -= 1; return findlcm(a b); } // Driver code. public static void main(String[] args) { int n = 7; if (n < 3) System.out.print(n); // base case else // Function call // pass nn-1 in function to find LCM of first n natural // number System.out.print(findlcm(n n - 1)); } } // This code is contributed by divyeshrabadiya07.
Python3 # Python3 program to find LCM # of First N Natural Numbers. # To calculate hcf def hcf(a b): if (b == 0): return a return hcf(b a % b) def findlcm(a b): if (b == 1): # lcm(ab)=(a*b)//hcf(ab) return a # Assign a=lcm of nn-1 a = (a * b) // hcf(a b) # b=b-1 b -= 1 return findlcm(a b) # Driver code n = 7 if (n < 3): print(n) else: # Function call # pass nn-1 in function # to find LCM of first n # natural number print(findlcm(n n - 1)) # This code is contributed by Shubham_Singh
C# // C# program to find LCM of First N Natural Numbers. using System; class GFG { // to calculate hcf static int hcf(int a int b) { if (b == 0) return a; return hcf(b a % b); } static int findlcm(int aint b) { if (b == 1) // lcm(ab)=(a*b)/hcf(ab) return a; // assign a=lcm of nn-1 a = (a * b) / hcf(a b); // b=b-1 b -= 1; return findlcm(a b); } // Driver code static void Main() { int n = 7; if (n < 3) Console.Write(n); // base case else // Function call // pass nn-1 in function to find LCM of first n natural // number Console.Write(findlcm(n n - 1)); } } // This code is contributed by divyesh072019.
JavaScript <script> // Javascript program to find LCM of First N Natural Numbers. // to calculate hcf function hcf(a b) { if (b == 0) return a; return hcf(b a % b); } function findlcm(ab) { if (b == 1) // lcm(ab)=(a*b)/hcf(ab) return a; // assign a=lcm of nn-1 a = (a * b) / hcf(a b); // b=b-1 b -= 1; return findlcm(a b); } let n = 7; if (n < 3) document.write(n); // base case else // Function call // pass nn-1 in function to find LCM of first n natural // number document.write(findlcm(n n - 1)); </script>
出力
420
時間計算量 : O(n log n)
補助スペース: ○(1)