C++ 中的质数阶乘


对于这个问题,我们给定一个数字 n。我们的任务是打印它的质数幂。

质数幂(Pn#)是一个数字,它是前 n 个质数的乘积。

质数幂类似于数字 n 的阶乘。区别在于阶乘可以是任意数字,但对于质数幂,所有质数都被使用。

让我们举个例子来理解这个问题:

Input: N = 4
Output
210
Explanation: Primorial number, Pn# = 2 * 3 * 5 * 7 = 210

要解决这个问题,我们必须找到前 n 个质数。打印到 n 的所有质数的乘积,这是质数幂的值。

例如

演示我们解决方案实现的程序:

 在线演示

#include<bits/stdc++.h>
using namespace std;
const int MAX = 1000000;
vector <int> primeNumbers;
void findPrimes() {
   bool marked[MAX/2 + 1] = {0};
   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;
   primeNumbers.push_back(2);
   for (int i=1; i<=MAX/2; i++)
      if (marked[i] == false)
         primeNumbers.push_back(2*i + 1);
}
int findPrimorial(int n) {
   findPrimes();
   int result = 1;
   for (int i=0; i<n; i++)
   result = result * primeNumbers[i];
   return result;
}
int main() {
   int N = 6;
   cout<<"Primorial(P#) of first "<<N<<" prime numbers is "<<findPrimorial(N)<<endl;
   return 0;
}

输出

Primorial(P#) of first 6 prime numbers is 30030

更新日期:03-Feb-2020

421 次浏览

开启你的职业生涯

通过完成课程获得认证

开始吧
广告