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

xiaoxiao2021-02-28  108

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

#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数组里即是该素数表。

转载请注明原文地址: https://www.6miu.com/read-48725.html

最新回复(0)