int prime[maxn]; int visit[maxn]; void Prime(){ mem(visit,0); //若为1,则不是素数 mem(prime, 0); //将已经搜索到的素数保存下来 int cnt = 0; //当前有多少个素数 for (int i = 2;i <= maxn; i++) { if (!visit[i]) { prime[cnt++] = i; } for (int j = 0; j < cnt && i*prime[j] <= maxn; j++) { visit[i*prime[j]] = 1; if (i % prime[j] == 0) { break; } } } }