C/C++筛选法算素数
2017-12-14 02:34
351 查看
什么是求素数
)i在2到n-1之间任取一个数,如果n能被整除则不是素数,否则就是素数
普通枚举法:
#include <iostream> #include <string> #include <cmath> #include <cstring> using namespace std; bool isPlain(int x){ if(x<2) return false; else{ for(int i=2;i<x;i++) { if(!(x%i)) return false; } } return true; } int main() { int n; cin>>n; int cot=0; for(int j=0;j<n;j++){ if(isPlain(j)){ cout<<j<<((++cot%7==0)?"\n":"\t"); } } }
筛选法:
- 原始版本:
#include <iostream> #include <string> #include <cmath> #include <cstring> using namespace std; int main() { int n; cin>>n; bool* ans=new bool ; memset(ans,true,sizeof(bool)*n);// ans[0]=false; ans[1]=false; for(int i=2;i<n;i++){ if(ans[i]){ for(int j=i*2;j<n;j+=i){//倍数取整 ans[j]=false; } } } int col = 0; for(int i=0;i<n;i++){ if(ans[i]){ cout<<i<<" "; } } return 0; }
- 改进版本
#include <iostream> #include <string> #include <cmath> #include <cstring> #include <bitset> using namespace std; int main() { int n; cin>>n; bitset<100000> ans; ans.set(0); ans.set(1); for(int j=2; j<=sqrt(n); j++) { for(int i=2*j; i < n; i+=j) { ans.set(i); } } int cot=0; for(int i=0; i<n; i++) { if(ans[i]!=1) { cout<<i<<((++cot%7==0)?"\n":"\t"); } } }
例题
question: 给定数字n,求出小于等于n的素数的个数,假设n<=1000000
- 埃式筛选法(
#include <bits/stdc++.h> /** @author:d g w */ using namespace std; const int n=1000002; bool isprime[1000002]; int num[1000002]; int main() { fill(isprime,isprime+n,1); fill(num,num+n,0); isprime[1]=0; num[1]=0; for(int i=2;i<n;i++){ if(isprime[i]){ num[i]=num[i-1]+1; for(int j=2*i;j<n;j+=i){ isprime[j]=0; } }else{ num[i]=num[i-1]; } } int n; while(~scanf("%d",&n)){ cout<<num ; } return 0; }
- 欧拉筛选
const int cont = 1000002;; int Prime[cont]; bool vis[cont]; void prepare() { int num = 0; memset(vis,true,sizeof(vis)); for(int i = 2; i <= cont; ++i) { if(vis[i]) Prime[++num] = i; for(int j = 1; j <= num; ++j) { if (i * Prime[j] > cont) break; vis[i * Prime[j]] = false; if (i % Prime[j] == 0) //表明这个数已经被筛过了 break; } } }
相关文章推荐
- PAT 乙级 1007. 素数对猜想 (20) c++ 筛选法求素数
- 筛选法查找1000以内的素数c++代码实例及运行结果
- C++素数筛选法
- 筛选法查找1000以内的素数c++代码实例及运行结果
- 筛选法查找1000以内的素数c++代码实例及运行结果
- 筛选法查找1000以内的素数c++代码实例及运行结果
- C/C++编程小练习 计算10亿之内的素数和(合数筛选算法实现)
- C/C++中的素数筛选
- C/C++利用筛选法算素数的方法示例
- 筛选法查找1000以内的素数c++代码实例及运行结果
- 筛选法查找1000以内的素数c++代码实例及运行结果
- 筛选法查找1000以内的素数c++代码实例及运行结果
- 筛选法查找1000以内的素数c++代码实例及运行结果
- C++筛选法求素数(简单)
- 筛选法查找1000以内的素数c++代码实例及运行结果
- 筛选法查找1000以内的素数c++代码实例及运行结果
- 筛选法查找1000以内的素数c++代码实例及运行结果
- Python和C++求10000以内的所有素数(Eratosthenes筛选 求素数)
- hdu 1999 不可摸数 筛选素数 两次打表
- C++求素数