📜  阵列产品的主要因素

📅  最后修改于: 2021-06-26 10:04:57             🧑  作者: Mango

给定一个整数数组,让我们说P是数组元素的乘积。求出乘积P的不同素数的数量。

例子:

天真的方法:
该问题的简单解决方案是将数组中的每个数字相乘,然后找到乘积的不同素数的数量。
但是这种方法会导致整数溢出。

更好的方法:
为了避免溢出而不是将数字相乘,我们可以分别找到每个元素的质因数,并将质因数存储在一组或唯一的映射图中。

C++
// C++ program to count distinct prime
// factors of a number.
#include 
using namespace std;
 
// Function to count the number of distinct prime
// factors of product of array
int Distinct_Prime_factors(vector a)
{
    // use set to store distinct factors
    unordered_set m;
 
    // iterate over every element of array
    for (int i = 0; i < a.size(); i++) {
        int sq = sqrt(a[i]);
 
        // from 2 to square root of number run
        // a loop and check the numbers which
        // are factors.
        for (int j = 2; j <= sq; j++) {
            if (a[i] % j == 0) {
 
                // if j is a factor store it in the set
                m.insert(j);
 
                // divide the number with j till it
                // is divisible so that only prime factors
                // are stored
                while (a[i] % j == 0) {
                    a[i] /= j;
                }
            }
        }
 
        // if the number is still greater than 1 then
        // it is a prime factor, insert in set
        if (a[i] > 1) {
            m.insert(a[i]);
        }
    }
 
    // the number of unique prime factors will
    // the size of the set
    return m.size();
}
 
// Driver Function
int main()
{
    vector a = { 1, 2, 3, 4, 5 };
    cout << Distinct_Prime_factors(a) << '\n';
    return 0;
}


Java
// Java program to count distinct
// prime factors of a number.
import java.util.*;
 
class GFG {
 
    // Function to count the number
    // of distinct prime factors of
    // product of array
    static int Distinct_Prime_factors(Vector a)
    {
        // use set to store distinct factors
        HashSet m = new HashSet();
 
        // iterate over every element of array
        for (int i = 0; i < a.size(); i++) {
            int sq = (int)Math.sqrt(a.get(i));
 
            // from 2 to square root of number
            // run a loop and check the numbers
            // which are factors.
            for (int j = 2; j <= sq; j++) {
                if (a.get(i) % j == 0) {
 
                    // if j is a factor store
                    // it in the set
                    m.add(j);
 
                    // divide the number with j
                    // till it is divisible so
                    // that only prime factors
                    // are stored
                    while (a.get(i) % j == 0) {
                        a.set(i, a.get(i) / j);
                    }
                }
            }
 
            // if the number is still greater
            // than 1 then it is a prime factor,
            // insert in set
            if (a.get(i) > 1) {
                m.add(a.get(i));
            }
        }
 
        // the number of unique prime
        // factors will the size of the set
        return m.size();
    }
 
    // Driver Code
    public static void main(String args[])
    {
        Vector a = new Vector();
        a.add(1);
        a.add(2);
        a.add(3);
        a.add(4);
        a.add(5);
        System.out.println(Distinct_Prime_factors(a));
    }
}
 
// This code is contributed by Arnab Kundu


Python3
# Python3 program to count distinct
# prime factors of a number
import math
 
# Function to count the number of distinct
# prime factors of product of array
def Distinct_Prime_factors( a):
     
    # use set to store distinct factors
    m = []
 
    # iterate over every element of array
    for i in range (len(a)) :
        sq = int(math.sqrt(a[i]))
 
        # from 2 to square root of number run
        # a loop and check the numbers which
        # are factors.
        for j in range(2, sq + 1) :
            if (a[i] % j == 0) :
 
                # if j is a factor store
                # it in the set
                m.append(j)
 
                # divide the number with j till it
                # is divisible so that only prime
                # factors are stored
                while (a[i] % j == 0) :
                    a[i] //= j
 
        # if the number is still greater
        # than 1 then it is a prime factor,
        # insert in set
        if (a[i] > 2) :
            m.append(a[i])
 
    # the number of unique prime factors
    # will the size of the set
    return len(m)
 
# Driver Code
if __name__ == "__main__":
 
    a = [ 1, 2, 3, 4, 5 ]
    print (Distinct_Prime_factors(a))
 
# This code is contributed by ita_c


C#
// C# program to count distinct
// prime factors of a number.
using System;
using System.Collections.Generic;
 
class GFG {
 
    // Function to count the number
    // of distinct prime factors of
    // product of array
    static int Distinct_Prime_factors(List a)
    {
        // use set to store distinct factors
        HashSet m = new HashSet();
 
        // iterate over every element of array
        for (int i = 0; i < a.Count; i++) {
            int sq = (int)Math.Sqrt(a[i]);
 
            // from 2 to square root of number
            // run a loop and check the numbers
            // which are factors.
            for (int j = 2; j <= sq; j++) {
                if (a[i] % j == 0) {
 
                    // if j is a factor store
                    // it in the set
                    m.Add(j);
 
                    // divide the number with j
                    // till it is divisible so
                    // that only prime factors
                    // are stored
                    while (a[i] % j == 0) {
                        a[i] = a[i] / j;
                    }
                }
            }
 
            // if the number is still greater
            // than 1 then it is a prime factor,
            // insert in set
            if (a[i] > 1) {
                m.Add(a[i]);
            }
        }
 
        // the number of unique prime
        // factors will the size of the set
        return m.Count;
    }
 
    // Driver Code
    public static void Main()
    {
        List a = new List();
        a.Add(1);
        a.Add(2);
        a.Add(3);
        a.Add(4);
        a.Add(5);
        Console.WriteLine(Distinct_Prime_factors(a));
    }
}
 
// This code is contributed by ihritik


Javascript


输出 :

3

如果您希望与行业专家一起参加现场课程,请参阅《 Geeks现场课程》和《 Geeks现场课程美国》。