标签:进一步 http prime 清除 break 遍历 int 并且 eof
参考博客: https://www.cnblogs.com/Duahanlang/p/3212323.html
1.遇见素数时将该素数的倍数都筛掉
//缺陷是会重复筛选有不同素数因子的合数 如 10=2*5 ,将被筛两次
1 void isprime1(){ 2 memset(vis,0,sizeof(vis)); 3 int cnt = 0; 4 for(int i = 2;i < n;++i){ 5 if(!vis[i]){ 6 prime[cnt++] = i; 7 for(int j = i*2;j <n;j+=i) vis[j] = 1; 8 } 9 } 10 }
2.线性筛法 当i遍历到为前面已经存储的素数的倍数时跳出循坏
1 void isprime2(){ 2 memset(vis,0,sizeof(vis)); 3 int cnt = 0; 4 for(int i = 2;i < n;++i){ 5 if(!vis[i]) prime[cnt++] = i; 6 for(int j = 0;j <cnt&&i*prime[j]<n;++j){ 7 vis[i*prime[j]] = 1; 8 if(i%prime[j]==0)break; 9 } 10 } 11 }
3.进一步优化
//原理:不管偶数 排除2 并且给4清除标记
1 void isprime3(){ 2 memset(vis,0,sizeof(vis)); 3 int cnt = 1; 4 prime[0] = 2;vis[4] = 1; 5 for(int i = 3;i < n;i+=2){ 6 if(!vis[i]) prime[cnt++] = i; 7 for(int j = 0;j <cnt&&i*prime[j]<n;++j){ 8 vis[i*prime[j]] = 1; 9 if(i%prime[j]==0)break; 10 } 11 } 12 }
标签:进一步 http prime 清除 break 遍历 int 并且 eof
原文地址:https://www.cnblogs.com/h404nofound/p/11345756.html