logo

숫자의 첫 번째

숫자 n이 주어지면 작업은 그 원시값을 계산하는 것입니다. 원시(P로 표시됨)N#)은 처음 n개의 소수의 곱입니다. 원시 숫자의 계승은 숫자의 계승과 유사합니다. 원시에서는 모든 자연수를 곱하는 것이 아니라 소수만 곱하여 숫자의 원시를 계산합니다. P#으로 표시됩니다.
예:  
 

  Input:   n = 3   Output:   30 Primorial = 2 * 3 * 5 = 30 As a side note factorial is 2 * 3 * 4 * 5   Input:   n = 5   Output:   2310 Primorial = 2 * 3 * 5 * 7 * 11 


 

권장 실습 숫자의 첫 번째 시도해 보세요!


에이 순진한 접근 1부터 n까지의 모든 숫자를 하나씩 확인하여 소수인지 아닌지 확인하고, 그렇다면 곱셈을 결과에 저장합니다. 마찬가지로 n까지 소수의 곱셈 결과를 저장합니다.
효율적인 방법은 다음을 사용하여 n까지의 모든 소수를 찾는 것입니다. 순다람의 체 그런 다음 모두 곱하여 원시값을 계산하세요.
 



C++
// C++ program to find Primorial of given numbers #include   using namespace std; const int MAX = 1000000; // vector to store all prime less than and equal to 10^6 vector <int> primes; // Function for sieve of sundaram. This function stores all // prime numbers less than MAX in primes void sieveSundaram() {  // In general Sieve of Sundaram produces primes smaller  // than (2*x + 2) for a number given number x. Since  // we want primes smaller than MAX we reduce MAX to half  // This array is used to separate numbers of the form  // i+j+2ij from others where 1 <= i <= j  bool marked[MAX/2 + 1] = {0};  // Main logic of Sundaram. Mark all numbers which  // do not generate prime number by doing 2*i+1  for (int i = 1; i <= (sqrt(MAX)-1)/2 ; i++)  for (int j = (i*(i+1))<<1 ; j <= MAX/2 ; j += 2*i +1)  marked[j] = true;  // Since 2 is a prime number  primes.push_back(2);  // Print other primes. Remaining primes are of the  // form 2*i + 1 such that marked[i] is false.  for (int i=1; i<=MAX/2; i++)  if (marked[i] == false)  primes.push_back(2*i + 1); } // Function to calculate primorial of n int calculatePrimorial(int n) {  // Multiply first n primes   int result = 1;   for (int i=0; i<n; i++)  result = result * primes[i];  return result; } // Driver code int main() {  int n = 5;  sieveSundaram();  for (int i = 1 ; i<= n; i++)  cout << 'Primorial(P#) of ' << i << ' is '  << calculatePrimorial(i) <<endl;  return 0; } 
Java
// Java program to find Primorial of given numbers  import java.util.*; class GFG{ public static int MAX = 1000000; // vector to store all prime less than and equal to 10^6  static ArrayList<Integer> primes = new ArrayList<Integer>(); // Function for sieve of sundaram. This function stores all  // prime numbers less than MAX in primes  static void sieveSundaram() {  // In general Sieve of Sundaram produces primes smaller   // than (2*x + 2) for a number given number x. Since   // we want primes smaller than MAX we reduce MAX to half   // This array is used to separate numbers of the form   // i+j+2ij from others where 1 <= i <= j   boolean[] marked = new boolean[MAX];  // Main logic of Sundaram. Mark all numbers which   // do not generate prime number by doing 2*i+1   for (int i = 1; i <= (Math.sqrt(MAX) - 1) / 2 ; i++)  {  for (int j = (i * (i + 1)) << 1 ; j <= MAX / 2 ; j += 2 * i + 1)  {  marked[j] = true;  }  }  // Since 2 is a prime number   primes.add(2);  // Print other primes. Remaining primes are of the   // form 2*i + 1 such that marked[i] is false.   for (int i = 1; i <= MAX / 2; i++)  {  if (marked[i] == false)  {  primes.add(2 * i + 1);  }  } } // Function to calculate primorial of n  static int calculatePrimorial(int n) {  // Multiply first n primes   int result = 1;  for (int i = 0; i < n; i++)  {  result = result * primes.get(i);  }  return result; } // Driver code  public static void main(String[] args) {  int n = 5;  sieveSundaram();  for (int i = 1 ; i <= n; i++)  {  System.out.println('Primorial(P#) of '+i+' is '+calculatePrimorial(i));  } } } // This Code is contributed by mits 
Python3
# Python3 program to find Primorial of given numbers  import math MAX = 1000000; # vector to store all prime less than and equal to 10^6  primes=[]; # Function for sieve of sundaram. This function stores all  # prime numbers less than MAX in primes  def sieveSundaram(): # In general Sieve of Sundaram produces primes smaller  # than (2*x + 2) for a number given number x. Since  # we want primes smaller than MAX we reduce MAX to half  # This array is used to separate numbers of the form  # i+j+2ij from others where 1 <= i <= j  marked=[False]*(int(MAX/2)+1); # Main logic of Sundaram. Mark all numbers which  # do not generate prime number by doing 2*i+1  for i in range(1int((math.sqrt(MAX)-1)/2)+1): for j in range(((i*(i+1))<<1)(int(MAX/2)+1)(2*i+1)): marked[j] = True; # Since 2 is a prime number  primes.append(2); # Print other primes. Remaining primes are of the  # form 2*i + 1 such that marked[i] is false.  for i in range(1int(MAX/2)): if (marked[i] == False): primes.append(2*i + 1); # Function to calculate primorial of n  def calculatePrimorial(n): # Multiply first n primes  result = 1; for i in range(n): result = result * primes[i]; return result; # Driver code  n = 5; sieveSundaram(); for i in range(1n+1): print('Primorial(P#) of'i'is'calculatePrimorial(i)); # This code is contributed by mits 
C#
// C# program to find Primorial of given numbers  using System;  using System.Collections; class GFG{ public static int MAX = 1000000; // vector to store all prime less than and equal to 10^6  static ArrayList primes = new ArrayList(); // Function for sieve of sundaram. This function stores all  // prime numbers less than MAX in primes  static void sieveSundaram() {  // In general Sieve of Sundaram produces primes smaller   // than (2*x + 2) for a number given number x. Since   // we want primes smaller than MAX we reduce MAX to half   // This array is used to separate numbers of the form   // i+j+2ij from others where 1 <= i <= j   bool[] marked = new bool[MAX];  // Main logic of Sundaram. Mark all numbers which   // do not generate prime number by doing 2*i+1   for (int i = 1; i <= (Math.Sqrt(MAX) - 1) / 2 ; i++)  {  for (int j = (i * (i + 1)) << 1 ; j <= MAX / 2 ; j += 2 * i + 1)  {  marked[j] = true;  }  }  // Since 2 is a prime number   primes.Add(2);  // Print other primes. Remaining primes are of the   // form 2*i + 1 such that marked[i] is false.   for (int i = 1; i <= MAX / 2; i++)  {  if (marked[i] == false)  {  primes.Add(2 * i + 1);  }  } } // Function to calculate primorial of n  static int calculatePrimorial(int n) {  // Multiply first n primes   int result = 1;  for (int i = 0; i < n; i++)  {  result = result * (int)primes[i];  }  return result; } // Driver code  public static void Main() {  int n = 5;  sieveSundaram();  for (int i = 1 ; i <= n; i++)  {  System.Console.WriteLine('Primorial(P#) of '+i+' is '+calculatePrimorial(i));  } } } // This Code is contributed by mits 
PHP
 // PHP program to find Primorial  // of given numbers $MAX = 100000; // vector to store all prime less // than and equal to 10^6 $primes = array(); // Function for sieve of sundaram.  // This function stores all prime  // numbers less than MAX in primes function sieveSundaram() { global $MAX $primes; // In general Sieve of Sundaram  // produces primes smaller than  // (2*x + 2) for a number given  // number x. Since we want primes  // smaller than MAX we reduce MAX  // to half. This array is used to  // separate numbers of the form // i+j+2ij from others where 1 <= i <= j $marked = array_fill(0 $MAX / 2 + 1 0); // Main logic of Sundaram. Mark all numbers which // do not generate prime number by doing 2*i+1 for ($i = 1; $i <= (sqrt($MAX) - 1) / 2 ; $i++) for ($j = ($i * ($i + 1)) << 1 ; $j <= $MAX / 2 ; $j += 2 * $i + 1) $marked[$j] = true; // Since 2 is a prime number array_push($primes 2); // Print other primes. Remaining primes  // are of the form 2*i + 1 such that // marked[i] is false. for ($i = 1; $i <= $MAX / 2; $i++) if ($marked[$i] == false) array_push($primes (2 * $i + 1)); } // Function to calculate primorial of n function calculatePrimorial($n) { global $primes; // Multiply first n primes  $result = 1; for ($i = 0; $i < $n; $i++) $result = $result * $primes[$i]; return $result; } // Driver code $n = 5; sieveSundaram(); for ($i = 1 ; $i<= $n; $i++) echo 'Primorial(P#) of ' . $i . ' is ' . calculatePrimorial($i) . 'n'; // This code is contributed by mits ?> 
JavaScript
<script> // Javascript program to find Primorial // of given numbers let MAX = 100000; // vector to store all prime less // than and equal to 10^6 let primes = new Array(); // Function for sieve of sundaram. // This function stores all prime // numbers less than MAX in primes function sieveSundaram() {    // In general Sieve of Sundaram  // produces primes smaller than  // (2*x + 2) for a number given  // number x. Since we want primes  // smaller than MAX we reduce MAX  // to half. This array is used to  // separate numbers of the form  // i+j+2ij from others where 1 <= i <= j  let marked = new Array(MAX / 2 + 1).fill(0);  // Main logic of Sundaram. Mark all numbers which  // do not generate prime number by doing 2*i+1  for (let i = 1; i <= (Math.sqrt(MAX) - 1) / 2 ; i++)  for (let j = (i * (i + 1)) << 1 ;  j <= MAX / 2 ; j += 2 * i + 1)  marked[j] = true;  // Since 2 is a prime number  primes.push(2);  // Print other primes. Remaining primes  // are of the form 2*i + 1 such that  // marked[i] is false.  for (let i = 1; i <= MAX / 2; i++)  if (marked[i] == false)  primes.push(2 * i + 1); } // Function to calculate primorial of n function calculatePrimorial(n) {   // Multiply first n primes  let result = 1;  for (let i = 0; i < n; i++)  result = result * primes[i];  return result; } // Driver code let n = 5; sieveSundaram(); for (let i = 1 ; i<= n; i++)  document.write('Primorial(P#) of ' + i + ' is ' +   calculatePrimorial(i) + '  
'
); // This code is contributed by gfgking </script>

산출:   

문자열을 char로 변환 java
Primorial(P#) of 1 is 2 Primorial(P#) of 2 is 6 Primorial(P#) of 3 is 30 Primorial(P#) of 4 is 210 Primorial(P#) of 5 is 2310

시간 복잡도 :-  O(N) 


 

퀴즈 만들기