C++素数筛选法
2017-03-08 22:13
337 查看
#include<bits/stdc++.h> using namespace std; const int arrSize=1001; int prime[arrSize]; //保存素数 int primeSize; //限定范围内素数个数 bool mark[arrSize]; //用来做标记 void primeFilter(){ primeSize=0; for(int i=2;i<arrSize;i++){ if(!mark[i]){ prime[primeSize++]=i; for(int j=i*i;j<arrSize;j+=i) mark[j]=true; //从i*i开始 } } /*另一种写法*/ /*for(int i=2;i<arrSize;i++){ if(mark[i]) continue; prime[primeSize++]=i; if(i>1000) continue; for(int j=i*i;j<arrSize;j+=i) mark[j]=true; }//*/ } long long numPrime[1001]; int valPrime[1000]; int valSize[1000]; int main(){ long long num; long long val,temp1,temp2; primeFilter(); while(scanf("%lld",&num)!=EOF){ scanf("%lld",&val); for(int i=0;i<1001;i++){ numPrime[i]=0; valPrime[i]=0; valSize[i]=0; } for(int i=2;i<=num;i++){ if(!mark[i]) numPrime[i]++; else{ temp2=i; for(int j=0;j<primeSize;j++){ while(temp2%prime[j]==0){ numPrime[prime[j]]++; temp2/=prime[j]; } if(temp2==1) break; } } } long long index=0; for(int i=0;i<primeSize;i++){ if(val%prime[i]==0) { while(val%prime[i]==0){ valSize[index]++;//保存每个分解出的素数的个数 val/=prime[i]; } valPrime[index++]=prime[i];//将分解出的素数值保存下来 if(val==1) break; } } int min=10000; for(int i=0;i<index;i++){ temp1=numPrime[valPrime[i]]/valSize[i]; if(temp1<min) min=temp1; } printf("%d\n",min); } return 0; }
相关文章推荐
- C/C++编程小练习 计算10亿之内的素数和(合数筛选算法实现)
- C/C++筛选法算素数
- Python和C++求10000以内的所有素数(Eratosthenes筛选 求素数)
- C++筛选法求素数(简单)
- C/C++利用筛选法算素数的方法示例
- 筛选法查找1000以内的素数c++代码实例及运行结果
- 筛选法查找1000以内的素数c++代码实例及运行结果
- 筛选法查找1000以内的素数c++代码实例及运行结果
- PAT 乙级 1007. 素数对猜想 (20) c++ 筛选法求素数
- 筛选法查找1000以内的素数c++代码实例及运行结果
- 筛选法查找1000以内的素数c++代码实例及运行结果
- 筛选法查找1000以内的素数c++代码实例及运行结果
- 筛选法查找1000以内的素数c++代码实例及运行结果
- C/C++中的素数筛选
- 筛选法查找1000以内的素数c++代码实例及运行结果
- 筛选法查找1000以内的素数c++代码实例及运行结果
- 筛选法查找1000以内的素数c++代码实例及运行结果
- 筛选法查找1000以内的素数c++代码实例及运行结果
- 1928 Prime Distance 素数筛选法 ,筛选一段区间的素数
- Prime Palindromes( 素数回文) C++实现