📜  C / C++程序,查找具有多个唯一素数的乘积

📅  最后修改于: 2021-05-28 02:20:07             🧑  作者: Mango

给定数字n,我们需要找到其所有唯一素数的乘积。质数:质数本身就是一个基本上是数字的因数。

例子:

Input: num = 10
Output: Product is 10
Explanation:
Here, the input number is 10 having only 2 prime factors and they are 5 and 2.
And hence their product is 10.

Input : num = 25
Output: Product is 5
Explanation:
Here, for the input to be 25  we have only one unique prime factor i.e 5.
And hence the required product is 5.

方法1(简单)
使用从i = 2到n的循环,并检查i是否为n的因数,然后检查i是否为素数,如果是,则将乘积存储在乘积变量中,并继续此过程,直到i = n。

// C++ program to find product of
// unique prime factors of a number
#include 
using namespace std;
  
long long int productPrimeFactors(int n)
{
    long long int product = 1;
  
    for (int i = 2; i <= n; i++) {
  
        // Checking if 'i' is factor of num
        if (n % i == 0) {
  
            // Checking if 'i' is a Prime number
            bool isPrime = true;
            for (int j = 2; j <= i / 2; j++) {
                if (i % j == 0) {
                    isPrime = false;
                    break;
                }
            }
  
            // condition if 'i' is Prime number
            // as well as factor of num
            if (isPrime) {
                product = product * i;
            }
        }
    }
  
    return product;
}
  
// driver function
int main()
{
    int n = 44;
    cout << productPrimeFactors(n);
    return 0;
}
输出:
22

方法2(高效)
这个想法是基于有效程序来打印给定数字的所有主要因素

// C++ program to find product of
// unique prime factors of a number
#include 
using namespace std;
  
// A function to print all prime factors of
// a given number n
long long int productPrimeFactors(int n)
{
    long long int product = 1;
  
    // Handle prime factor 2 explicitly so that
    // can optimally handle other prime factors.
    if (n % 2 == 0) {
        product *= 2;
        while (n % 2 == 0)
            n = n / 2;
    }
  
    // n must be odd at this point. So we can
    // skip one element (Note i = i +2)
    for (int i = 3; i <= sqrt(n); i = i + 2) {
        // While i divides n, print i and
        // divide n
        if (n % i == 0) {
            product = product * i;
            while (n % i == 0)
                n = n / i;
        }
    }
  
    // This condition is to handle the case when n
    // is a prime number greater than 2
    if (n > 2)
        product = product * n;
  
    return product;
}
  
// driver function
int main()
{
    int n = 44;
    cout << productPrimeFactors(n);
    return 0;
}
输出:
22

有关更多详细信息,请参阅有关大量独特素数乘积的完整文章!

想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。