#include <bits/stdc++.h>
using namespace std;
const int N=1e8+10;
//primes[]:存储所有素数 k:素数个数
int primes[6000010],k;
bool f[N];//true:不是素数 false:是素数
void fun(int n){
f[0]=true;//特判
f[1]=true;//特判
for(int i=2;i<=n;i++){
if(!f[i]){//没有被标记,是素数
k++;//计算素数个数
primes[k]=i;//将素数存放到primes[]里
}
for(int j=1;i*primes[j]<=n;j++){//j循环的是primes[j]
f[i*primes[j]]=true;//将该数筛掉
if(i%primes[j]==0) break;
/*
第17行解释:i%primes[j]==0代表primes[j]为i的因子,
求的是i的最小质因子,这样就可以达到优化埃筛的目的:不重复筛除同一个整数
如果不break,循环后,j++,变成了这样:i%i*p[j+1]==0
这语句(理论上)是对的
09-14
612
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)