C ++中最大唯一质数的数量

给定任务是找到一个最大素数,该素数可以在[1,N]的范围内给出N。

现在让我们使用示例了解我们必须做的事情-

输入-N = 100

输出-3

说明-让我们在[1,100]范围内取30

30 = 3 * 2 * 5 =唯一素因数。因此,在[1,100]范围内,最多可以找到3个唯一因子。

输入-N = 300

输出-4

在以下程序中使用的方法如下

  • 在功能上,MaxPrime()我们将首先检查(N <2)。如果是这样,则只需返回零,否则继续。

  • 然后,我们将使用Eratosthenes筛子找出给定数字N之前的所有素数。

  • 初始化两个int类型的变量pro = 1和max = 0分别存储乘积和最终答案。

  • 在Eratosthenes的筛子中,我们将第一组素数相乘,直到乘积保持小于N为止,方法是:-pro = * p;

  • 检查是否(pro> N)。如果是这样,则返回max并将max加1。

  • 在筛子外面,也返回最大值。

示例

#include <bits/stdc++.h>
using namespace std;
int MaxPrime(int N){
   if (N < 2)
      return 0;
   //使用Eratosthenes筛
   bool Arr[N+1];
   memset(Arr, true, sizeof(Arr));
   int pro = 1, max = 0;
   for (int p=2; p*p<=N; p++){
      if (Arr[p] == true){
         for (int i=p*2; i<=N; i += p)
            Arr[i] = false;
         /*Multiply first set of prime numbers while product remains smaller than N*/
         pro *= p;
         if (pro > N)
            return max;
         max++;
      }
   }
   return max;
}
//主要功能
int main(){
   int N = 300;
   cout << MaxPrime(N);
   return 0;
}

输出结果

如果运行上面的代码,我们将获得以下输出-

4