Leetcode[6279]. 数组乘积中的不同质因数数目

1.题目

给你一个正整数数组 nums ,对 nums 所有元素求积之后,找出并返回乘积中 不同质因数 的数目。

注意:

  • 质数 是指大于 1 且仅能被 1 及自身整除的数字。
  • 如果 val2 / val1 是一个整数,则整数 val1 是另一个整数 val2 的一个因数。

 

示例 1:

输入:nums = [2,4,3,7,10,6]
输出:4
解释:
nums 中所有元素的乘积是:2 * 4 * 3 * 7 * 10 * 6 = 10080 = 25 * 32 * 5 * 7 。
共有 4 个不同的质因数,所以返回 4 。

示例 2:

输入:nums = [2,4,8,16]
输出:1
解释:
nums 中所有元素的乘积是:2 * 4 * 8 * 16 = 1024 = 210 。
共有 1 个不同的质因数,所以返回 1 。

 

提示:

  • 1 <= nums.length <= 104
  • 2 <= nums[i] <= 1000

2.思路

这道题目主要是如何求一个整数的质因数,很基础的算法,但是我还不怎么会,特写下来记录一下。

首先判断一个数是否是质数,需要进行对这个数的开方处理。然后进行1~这个开方进行除运算,若能整除则不是质数。

具体代码见is_primer

3.代码

class Solution {
public:
    int is_prime(int n)
    {
        int x=sqrt(n);
        for(int i=2;i<=x;i++)
        {
            if(n%i==0)//不是质数
                return 0;
        }
        return 1;//是质数
    }
    int distinctPrimeFactors(vector<int>& nums) {
        int res=0;
        vector<int> v;
        int n=nums.size();
        for(int i=0;i<n;i++)
        {
            int m=nums[i];
            for(int j=2;j<=m;j++)//求这个数所有的质因数
            {
                if(j!=2 && j%2==0)
                  continue;
                if(m%j==0 && is_prime(j))//j是其中的一个质因数,满足即是质数又是因数的条件
                {
                    vector<int>::iterator it=find(v.begin(),v.end(),j);
                    if(it == v.end())//如果里面没有这个质数,则加入进去
                    {
                        v.emplace_back(j);
                    }
                }
            }
        }
        return v.size();
    }
};

 

posted @ 2023-01-01 20:56  追·不逝  阅读(65)  评论(0编辑  收藏  举报