C ++中大量的素数

在这个问题中,我们得到一个整数N <= 10 ^ 18。我们的任务是打印数字的所有素数以及出现的频率。

让我们举个例子来了解这个问题,

Input: 100
Output: 2 2
   5 2
Explanation: prime factorization of 100 = 2 * 2 * 5 * 5.

为了解决这个问题,我们将不得不找到数字的素因,然后计算它们的频率。

为此,我们将检查2的频率作为一个因子,并将其除以2。然后从3到平方根n进行检查。除并增加每个质数的频率,质数是该因子的一个因数。如果数字变为1,则停止。然后以该频率打印所有质数。

以下代码显示了我们解决方案的实现,

示例

#include <iostream>
#include <math.h>
using namespace std;
void factorize(long long n){
   int count = 0;
   while (!(n % 2)) {
      n/= 2;
      count++;
   }
   if (count)
      cout<<2<<"\t"<<count<<endl;
   for (long long i = 3; i <= sqrt(n); i += 2) {
      count = 0;
      while (n % i == 0) {
         count++;
         n = n / i;
      }
      if (count)
      cout<<i<<"\t"<<count<<endl;
   }
   if (n > 2)
   cout<<n<<"\t"<<1<<endl;
}
int main() {
   long long N = 21000;
   cout<<"The prime factors and their frequencies of the number "<<N<<" are \n";
   factorize(N);
   return 0;
}

输出结果

The prime factors and their frequencies of the number 21000 are
2   3
3   1
5   3
7   1