C++中唯一素因子的最大数量


给定任务是在[1, N]范围内找到一个数可以具有的唯一素因子的最大数量,其中N是给定的。

让我们用一个例子来理解我们必须做什么:

输入 - N=100

输出 - 3

解释 - 让我们在[1, 100]范围内取30

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

输入 - N=300

输出 - 4

下面程序中使用的方案如下

  • 在MaxPrime()函数中,我们将首先检查(N < 2)。如果是,则返回零,否则继续。

  • 然后,我们将使用埃拉托斯特尼筛法找出给定数字N之前的全部素数。

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

  • 在埃拉托斯特尼筛法中,我们将乘以第一组素数,直到乘积保持小于N,方法是写入- pro=*p;

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

  • 在筛法之外,也返回max。

示例

 在线演示

#include <bits/stdc++.h>
using namespace std;
int MaxPrime(int N){
   if (N < 2)
      return 0;
   // Using Sieve of 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;
}
//Main function
int main(){
   int N = 300;
   cout << MaxPrime(N);
   return 0;
}

输出

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

4

更新于:2020年8月17日

1K+ 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告