线性筛 o(n)复杂度打素数表

来源:互联网 发布:linux编辑模式怎么换行 编辑:程序博客网 时间:2024/05/22 03:08

这是打素数表最快的一种方法,叫线性筛,比普通的筛法虽然快不了多少,但是对于那种超大的恐怖数据还是很有用的。

#include <cstring>using namespace std;int prime[MAX], primesize;bool isprime[MAX];void getlist(int listsize){memset(isprime, 1, sizeof(isprime));isprime[1] = false;for (int i = 2; i <= listsize; i++){if (isprime[i])prime[++primesize] = i;for (int j = 1; j <= primesize&&i*prime[j] <= listsize; j++){isprime[i*prime[j]] = false;if (i%prime[j] == 0)break;}}}


函数getlist里面的参数是你要打的素数表的范围,调用该函数后,prime数组里即是该素数表。

阅读全文
0 0