什么是素数?
ans: 素数也又称质数。一个大于 1 的自然数,除了 1 和它自身外,不能被其他自然数整除的数叫做质数。最小的质数是 2,它也是唯一的偶数质数。最前面的质数依次排列为:2,3,5,7,11等。比 1 大但不是质数的数称为合数
普通素数的模板
bool isprime(int a)
{
if(a <= 1) return false;
for(int i = 2; i <= sqrt((double)a); i++)
if(a % i == 0)
return false;
return true;
}
超大素数的模板
#include <bits/stdc++.h>
#define _for(i,a,b) for(int i=a;i<b;i++)
using namespace std;
typedef long long LL;
const int N=1e6;
int pre[N],tmp;
bool vis[N];
void prime() //用到了 N、tmp 和 pre[N] 和 vis[N]
{
_for(i,2,N-10)
{
if(!vis[i])
pre[tmp++]=i;
for(int j=0;j<tmp&&i*pre[j]<N-5;j++)
{
vis[i*pre[j]]=1;
if(i%pre[j]==0)break;
}
}
}
int main()
{
prime();
_for(i,0,10)
{
LL ans = pre[i];
cout<<ans<<' ';
}
return 0;
}
Output
2 3 5 7 11 13 17 19 23 29
补充
vis 数组存储的是每个下标的数字是不是素数,0 代表是素数,1 代表不是素数
如 vis[2]=0 , vis[3]=0 , vis[4]=1 ,但是很重要的一点是虽然下标 0 和 1 不是素数
vis[0]=0 , vis[1]=0 ,却是这样的,尤其要注意哦~
3792

被折叠的 条评论
为什么被折叠?



