素数筛C++

版权声明:© 2020 • OmegaXYZ.com-版权所有 转载请注明出处 https://blog.csdn.net/xyisv/article/details/89763964

埃拉托斯特尼筛法(sieve of Eratosthenes ) 是古希腊数学家埃拉托斯特尼发明的计算素数的方法。对于求解不大于n的所有素数,我们先找出sqrt(n)内的所有素数p1到pk,其中k = sqrt(n),依次剔除Pi的倍数,剩下的所有数都是素数。
具体操作如上述 图片所示。

C++实现

#include<iostream>
#include<vector>
using namespace std;
 
int main(){
    int n;
    cin>>n;
    vector<bool> isprime(n+5, true);
    vector<int> ans;
    for(int i = 2; i <= n; i++){
        if(isprime[i]){
            ans.push_back(i);
            for(int j = i * i; j <= n; j += i)isprime[j] = false;
        }
    }
    for(auto i : ans)cout<<i<<" ";
    cout<<endl;
    return 0;
}

整除问题

给定n,a求最大的k,使n!可以被a^k
整除但不能被a^(k+1)整除。

#include<iostream>
#include<vector>
#include<map>
using namespace std;
 
int main(){
    int n, a, temp;
    int ans = 0x7fffffff;
    cin>>n>>a;
    vector<bool> isprime(1010, true);
    vector<int> prime;  //素数列表
    map<int, int> primecntnp;  //存储n!的质因子的指数
    map<int, int> primecnta;  //存储a的质因子的指数
    for(int i = 2; i <= 1010; i++){  //采用素数筛选出前1010个数中的素数,并将map初始化
        if(isprime[i]){
            prime.push_back(i);
            primecntnp[i] = primecnta[i] = 0;
            for(int j = i*i; j<= 1010; j += i)isprime[j] = false;
        }
    }
    //4! = 24 = 1*2*3*4 = 2*2*2*3
    for(int i = 0; i < prime.size(); i++){ //对n!进行因式分解
        temp = n;
        while(temp){ //按照p、p*p、p*p*p来进行因式分解
            primecntnp[prime[i]] += temp/prime[i];
            temp /= prime[i];
        }
    }
    for(int i = 0; i < prime.size(); i++){ //对a进行因式分解
        temp = a;
        while(temp % prime[i] == 0){
            primecnta[prime[i]]++;
            temp /= prime[i];
        }
        if(primecnta[prime[i]] == 0)continue; //a里面不存在的则无法提供
        if(primecntnp[prime[i]]/primecnta[prime[i]] < ans)ans = primecntnp[prime[i]]/primecnta[prime[i]];
    }//找到最小的指数,便是最大的k值
    cout<<ans<<endl;
    return 0;
 }
 /*
555 12
274
 */

更多内容访问omegaxyz.com
网站所有代码采用Apache 2.0授权
网站文章采用知识共享许可协议BY-NC-SA4.0授权
© 2019 • OmegaXYZ-版权所有 转载请注明出处

猜你喜欢

转载自blog.csdn.net/xyisv/article/details/89763964
今日推荐