普通解法:
bool isprime(int n)
{
if(n<2)return false;
for(int i=2;i<=sqrt(n);i++)
{
if(n%i==0)return false;
}
return true;
}
普通筛素数:
bool isprime[10010];
int main(){
memset(isprime,true,sizeof(isprime));
for(int i=2;i<10001;i++)
{
if(isprime[i]){
for(int j=2;j*i<10001;j++)
{
isprime[j*i] = false;
}
}
}
for(int i=2;i<10001;i++)
{
if(isprime[i]==true)
cout<<i<<" ";
}
}
线性筛素数:
const long long N = 1000010;
int dp[N]={1,1,0};
int prim[N],tot = 0;
void init()
{
for(long long i = 2;i<N;i++)
{
if(dp[i])
continue;
prim[tot++] = i;
for(long long j = i;j*i<N;j++){
dp[i*j] = 1;
}
}
}