标签:
#include <iostream>
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn=10005;
bool vis[maxn];
int prime[maxn];
void make_prime()//一般线性筛,会出现重复筛,每一次筛掉的是素数的倍数
{
memset(vis,true,sizeof(vis));
vis[0]=vis[1]=false;
int tot=0;
for(int i=2;i<maxn;i++)
{
if(vis[i])//表明i是素数
{
prime[++tot]=i;
for(int j=i*i;j<maxn;j+=i)//将能够整除这个数的筛掉
vis[j]=false;
}
}
}
void Euler_prime()//快速线性筛法,每一次筛掉的是i*(小于它最小素因子)的合数
{
memset(vis,true,sizeof(vis));
int tot=0;
for(int i=2;i<maxn;i++)
{
if(vis[i]) prime[tot++]=i;
for(int j=0;j<tot&&prime[j]*i<maxn;j++)//不管是不是素数都会进行这一步
{
vis[i*prime[j]]=false;
if(i%prime[j]==0) break;//关键
}
}
}
int main()
{
return 0;
}
标签:
原文地址:http://www.cnblogs.com/xuejianye/p/5667154.html