/*给定一个正整数N,求出[2,N]中的所有素数*/ #define maxn 1000000 boool vis[maxn]; void getprime(int n, int &tot, int ans[]) //筛法将合数筛掉,留下的则是素数 ,用于快速判断一个区间内的所有素数 { fot = 0; //记录素数的个数 for (int i = 2; i<= n; i++) vis[i] = true; //首先进行初始化,使得所有的为真 for (int i = 2; i<=n; i++) { if (vis[i]) //从素数2开始进行筛选 { if (i*i > n) break; for (int j = i*i; i<=n; j = j+i;) vis[j] = false; //把从i*i开始的每一个i的倍数的vis[j]赋值为false } } for (int i = 2; i<=n; i++) { if (vis[i]) ans[++tot] = i; //计算素数的个数,并且将所有的素数放在数组ans中,并从小到大编上号 } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/xiaotan1314/article/details/47249539