检查元素频次是否为质数

检查元素频次是否为质数

题目

第455场周赛

给你一个整数数组 nums。
如果数组中任一元素的 频次 是 质数,返回 true;否则,返回 false。
元素 x 的 频次 是它在数组中出现的次数。
质数是一个大于 1 的自然数,并且只有两个因数:1 和它本身。
 
示例 1:
输入: nums = [1,2,3,4,5,4]
输出: true
解释:
数字 4 的频次是 2,而 2 是质数。
示例 2:
输入: nums = [1,2,3,4,5]
输出: false
解释:
所有元素的频次都是 1。
示例 3:
输入: nums = [2,2,2,4,4]
输出: true
解释:
数字 2 和 4 的频次都是质数。

提示:
1 <= nums.length <= 100
0 <= nums[i] <= 100©leetcode

题解

由于数组大小n和数组的数值都在一百以内,所以可以直接对100内的所有数值算出是否质数。注意要申请的数组大小需要是101 而不是100,不然当题目给出频次为100的数组时,会越界。

这里算是否是质数的逻辑是用了除法,如果它能被比自己小的数字整除,就不是质数。下界是2,上界是平方根。

    public class Solution {
    public bool CheckPrimeFrequency(int[] nums) {
        //统计所有频次
        Dictionary<int,int> dict=new Dictionary<int,int>();
    
        foreach(int v in nums){
            if(!dict.ContainsKey(v)) dict[v]=0;
            dict[v]=dict[v]+1;
        }

        // 100以内的所有zhishu
        bool[] allZhi=new bool[101];
        fillIsZhi(allZhi);

        foreach(int f in dict.Values){
            if(allZhi[f]){
                return true;
            }
        }    
        return false;
    }

    private void fillIsZhi(bool[] arr){
        arr[2]=true;
        for(int i=3;i<100;i++){
            arr[i]=true;
            for(int j=2;j<=Math.Sqrt(i);j++){
                if(i%j==0){//能被j整除,不是质数
                    arr[i]=false;
                    break;
                }
            }
        }
    }
}©leetcode

大佬解答

这个解答算是否质数用了反过来的思路,某个数的倍数都不是质数。

class Solution {
    public boolean checkPrimeFrequency(int[] nums) {
        int[] cnt = new int[200];
        for (int x : nums) {
            cnt[x]++;
        }
        for (int x : cnt) {
            if (x > 0 && !np[x]) {
                return true;
            }
        }
        return false;
    }
    
   static int N = 200;
    static boolean[] np = new boolean[N];
    static {
        np[0] = np[1] = true;
        for (int i = 2; i < N; i++) {
            if (!np[i]) {
                for (int j = i + i; j < N; j += i) {
                    np[j] = true;
                }
            }
        }
    }
}
posted @ 2025-06-22 12:25  Fanny123  阅读(243)  评论(0)    收藏  举报