我觉得素数问题不是一两篇文章就可以解释清楚的,在数论中很多相关问题至今都无法解决。这里只是简单的总结在竞赛中用到的一小部分。
HDU5901这道是网络赛的一道素数题,有多种解法,这里推荐一些大佬的博客:http://blog.youkuaiyun.com/chaiwenjun000/article/details/52589457
http://blog.youkuaiyun.com/angon823/article/details/52577145(有资料链接)
素数筛有很多种方法,比如欧拉筛,埃氏筛,Meisell-Lehmer算法等等
这里主要说一下Meisell-Lehmer算法
Meisell-Lehmer算法模板(计算2~n中的素数个数)
bool np[maxn];
int prime[maxn],pi[maxn];
int getprime()
{
int cnt=0;
np[0]=np[1]=true;
pi[0]=pi[1]=0;
for(int i=2; i<maxn; ++i)
{
if(!np[i]) prime[++cnt]=i;
pi[i]=cnt;
for(int j=1; j<=cnt&&i*prime[j]<maxn; ++j)
{
np[i*prime[j]]=true;
if(i%prime[j]==0) break;
}
}
return cnt;
}
const int M=7;
const int PM