Je-li dané číslo n takové, že 1<= N <= 10^6 the Task is to Find the LCM of First n Natural Numbers.
Příklady:
Input : n = 5 Output : 60 Input : n = 6 Output : 60 Input : n = 7 Output : 420
Důrazně doporučujeme, abyste klikli sem a procvičili si to, než přejdete k řešení.
V níže uvedeném článku jsme diskutovali o jednoduchém řešení.
Nejmenší číslo dělitelné prvními n čísly
Výše uvedené řešení funguje dobře pro jeden vstup. Ale pokud máme více vstupů, je dobré je použít Eratosthenovo síto uložit všechny prvočinitele. Jak víme, pokud LCM(a b) = X, takže jakýkoli prvočinitel a nebo b bude také prvočíslo „X“.
- Inicializujte proměnnou lcm s 1
- Vygenerujte Eratosthenovo síto (boolův vektor isPrime) o délce 10^6 (v ideálním případě se musí rovnat počtu číslic ve faktoriálu)
- Nyní pro každé číslo v boolově vektoru isPrime, pokud je číslo prvočíslo (isPrime[i] je pravda), najděte maximální číslo, které je menší než dané číslo a rovná se mocnině prvočísla.
- Poté toto číslo vynásobte proměnnou lcm.
- Opakujte kroky 3 a 4, dokud nebude prvočíslo menší než dané číslo.
Ilustrace:
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
Níže je implementace výše uvedené myšlenky.
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 ?> Výstup
420
Časová složitost : O(n2)
Pomocný prostor: Na)
Jiný přístup:
Myšlenka je taková, že pokud je číslo menší než 3, vrátí číslo. Pokud je číslo větší než 2, najděte LCM nn-1
- Řekněme x=LCM(nn-1)
- znovu x=LCM(xn-2)
- znovu x=LCM(xn-3) ...
- .
- .
- znovu x=LCM(x1) ...
nyní je výsledkem x.
Pro nalezení LCM(ab) použijeme funkci hcf(ab), která vrátí HCF z (ab)
To víme LCM(ab)= (a*b)/HCF(ab)
Ilustrace:
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
Níže je uvedena implementace výše uvedeného přístupu
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>
Výstup
420
Časová složitost: O(n log n)
Pomocný prostor: O(1)