首页 > 其他分享 >Leetcode[6279]. 数组乘积中的不同质因数数目

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

时间:2023-01-01 21:12:52浏览次数:41  
标签:乘积 nums 6279 质数 整数 int 质因数 Leetcode

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();
    }
};

 

标签:乘积,nums,6279,质数,整数,int,质因数,Leetcode
From: https://www.cnblogs.com/echoqiqi/p/17018580.html

相关文章

  • 【LeetCode】122. 买卖股票的最佳时机Ⅱ
    官方介绍文档LeetCode说明连接:122.买卖股票的最佳时机II-力扣(LeetCode)贪心算法参考解题思路:买卖股票的最佳时机II(贪心,清晰图解)-买卖股票的最佳时机II-力扣(Le......
  • 【Leetcode 栈与队列】用两个栈实现队列
    题目用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,del......
  • leetcode-599. 两个列表的最小索引总和
    599.两个列表的最小索引总和-力扣(Leetcode)刚开始的思路是搞两个map,但是性能比较差,只需要构建一个map然后遍历第二个list即可[!添加后可以过滤一些肯定不符合条件的]......
  • leetcode-598. 范围求和 II
    598.范围求和II-力扣(Leetcode)Go语言没有针对int的最小值、最大值以及比较算法,可以有一套,不然每次都需要写这个min函数funcmaxCount(mint,nint,ops[][]int)int......
  • [第326场周赛]分解质因数,埃氏筛,欧拉筛
    leetcode新年福利,本次周赛没有Hard难度的题目,然后我就第一次AK了~总的来说不是很难,涉及到了三个算法,在此记录一下。分解质因数题目链接:​​6279.数组乘积中的不同质因数数......
  • leetcode-595. 大的国家
    595.大的国家-力扣(Leetcode)两种方法,一个是or一个是union,union会快一点#WriteyourMySQLquerystatementbelow#selectname,population,areafromWorld#wh......
  • leetcode-594. 最长和谐子序列
    594.最长和谐子序列-力扣(Leetcode)双指针,后面那个边界条件让我调了好几分钟funcfindLHS(nums[]int)int{sort.Ints(nums)left,right,maxLen:=0,0,......
  • leetcode-590. N 叉树的后序遍历
    590.N叉树的后序遍历-力扣(Leetcode)可以参考[[leetcode-589.N叉树的前序遍历]],代码差不多/***DefinitionforaNode.*typeNodestruct{*Valint......
  • leetcode-589. N 叉树的前序遍历
    589.N叉树的前序遍历-力扣(Leetcode)Go语言的切片操作方便性还不错/***DefinitionforaNode.*typeNodestruct{*Valint*Children[]*Node*......
  • [leetcode每日一题]1.1
    ​​2351.第一个出现两次的字母​​难度简单给你一个由小写英文字母组成的字符串 ​​s​​ ,请你找出并返回第一个出现 两次 的字母。注意:如果 ​​a​​ 的 第二......