题解 | #整除问题#

整除问题

https://www.nowcoder.com/practice/8e29045de1c84d349b43fdb123ab586a

//利用质因数分解的方法
#include <algorithm>
#include <iostream>
#include <map>
#include <vector>
#include <cmath>
using namespace std;

const int maxn = sqrt(1000) + 1;

vector<bool> isPrime(maxn, true);

vector<int> prime;

map<int, int> factorial;

map<int, int> prime_factor_a;

void Initial(){
    isPrime[0] = false;
    isPrime[1] = false;
    for(int i = 2; i < maxn; i++){
        if(!isPrime[i]) continue;
        else {
            prime.push_back(i);
            for(int j = i * i; j < maxn; j += i){
                isPrime[j] = false;
            }
        }
    }
}

void find_prime_factor(map<int, int>& prime_map, int n){
    for(int i = 0; i < prime.size() && prime[i] <= n; i++){
        while(n % prime[i] == 0){
            n /= prime[i];
            prime_map[prime[i]]++;

        }
    }
    if(n > 1) prime_map[n]++;
}

int main() {
    Initial();
    int n, a;
    cin >> n >> a;
    for(int i = 2; i <= n; i++){
        find_prime_factor(factorial, i);
    }
    find_prime_factor(prime_factor_a, a);
    int ret = factorial[prime_factor_a.begin()->first] / prime_factor_a.begin()->second;
    for(auto it : prime_factor_a){
        ret = min(ret, factorial[it.first] / it.second);
    }
    cout << ret;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

程序员饺子:正常 我沟通了200多个 15个要简历 面试2个 全投的成都的小厂。很多看我是27直接不会了😅
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务