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