欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

素数筛选法

程序员文章站 2024-03-15 15:20:12
...

当题目所求与素数相关且题给数据规模过大时,我们用普通的查找素数的算法即使提前打表也会TLE

所以我们谋求更加高效的算法来得到素数序列:

void isPrime ()
{
	memset(prim,0,sizeof(prim));
	prim[0]=prim[1]=1;
	for(int i=2; i*i <= maxn; i++)
	{
    	        if(prim[i]==0)
		{
		    for(int j=i+i;j<=maxn;j+=i)
			prim[j]=1;
		}
        }
}

当prim数组为1时说明不是素数

注意i循环中,终止条件是 i*i>maxn

在j循环中,j的初始值是2i 因为素数的两倍一定是非素数,j的终止条件是j>maxn,j每次的步数是i ,这样可以保证每次j都是非质数