0
点赞
收藏
分享

微信扫一扫

leetcode-204-计数质数

杨小羊_ba17 2022-03-31 阅读 43
leetcode

1.问题描述

https://leetcode-cn.com/problems/powx-n/

在这里插入图片描述

2. 解题代码

2.1. 基本解法

public class Solution {
    public int CountPrimes(int n) {
        int numCount=0;
        for (int i = 2; i < n; i++)
        {
            int selfNum=i/2;
            bool bPrimeNum=true;
            for (int j = 2; j <= selfNum; j++)
            {
                if(i%j==0)
                {
                    bPrimeNum=false;
                    break;
                }
            }
            if(bPrimeNum)
            {
                numCount++;
            }
        }
        return numCount;
    }
}

2.2. 完全筛选

public class Solution {
    public int CountPrimes(int n) {
        int numCount = 0;
        Dictionary<int, bool> dicCache = new Dictionary<int, bool>();
        for (int i = 2; i < n; i++)
        {
            if (!dicCache.ContainsKey(i))
            {
                numCount++;
                int index = 1;
                int num = i * index;
                while (num <= n)
                {
                    if (!dicCache.ContainsKey(num))
                    {
                        dicCache.Add(num, true);
                    }
                    index++;
                    num = i * index;
                }
            }
        }
        return numCount;
    }
}

2.3. 线性筛

public class Solution {
    public int CountPrimes(int n) {
        List<int> primes = new List<int>();
        int[] isPrime = new int[n];
        Array.Fill(isPrime, 1);

        for (int i = 2; i < n; ++i)
        {
            if (isPrime[i] == 1)
            {
                primes.Add(i);
            }
            for (int j = 0; j < primes.Count && i * primes[j] < n; ++j)
            {
                isPrime[i * primes[j]] = 0;
                if (i % primes[j] == 0)
                {
                    break;
                }
            }
        }

        return primes.Count;
    }
}
举报

相关推荐

0 条评论