题解 | #整除问题#

整除问题

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

将n!和a的质数分解求出来,那么n!和a相应质因子的指数之差就是答案。

#include <bits/stdc++.h>
#include <vector>
using namespace std;

const int Max = 1001;
vector<int> all(Max, 1);
vector<int> prime;

void initail(){
    
    all[0] = 0;
    all[1] = 0;

    for(int i = 2; i * i <= Max - 1; i++){
        if(all[i] == 1){
            for(int j = i; i * j <= Max - 1; j++){
                all[i * j] = 0;
            }
        }
    }

    for(int i = 2; i < Max; i++){
        if(all[i] == 1) prime.push_back(i);
    }

}


int main() {
    int n, a, i;
    cin >> n >> a;

    initail();

    vector<int> n_prime(n + 1, 0);
    i = 2;
    while(i <= n){  //得到n!的分解质因数的结果
        int temp = i;
        for(int j = 0; j < prime.size() && prime[j] <= temp; j++){
            while(temp % prime[j] == 0){
                temp /= prime[j];
                n_prime[prime[j]]++;
            }
        }
        i++;
    }

    vector<int> a_prime(n + 1, 0);
    for(int j = 0; j < prime.size() && prime[j] <= a; j++){
        while(a % prime[j] == 0){
            a /= prime[j];
            a_prime[prime[j]]++;
        }
    }

    int min = 1000;
    for(int j = 0; j <= n; j++){
        int cha = n_prime[j] - a_prime[j];
        if(all[j] == 1 && a_prime[j] != 0 && cha < min){
            min = cha;
        }
    }

    cout << min + 1;





}

全部评论

相关推荐

霁华Tel:秋招结束了,好累。我自编了一篇对话,语言别人看不懂,我觉得有某种力量在控制我的身体,我明明觉得有些东西就在眼前,但身边的人却说啥也没有,有神秘人通过电视,手机等在暗暗的给我发信号,我有时候会突然觉得身体的某一部分不属于我了。面对不同的人或场合,我表现出不一样的自己,以至于都不知道自己到底是什么样子的人。我觉得我已经做的很好,不需要其他人的建议和批评,我有些时候难以控制的兴奋,但是呼吸都让人开心。
点赞 评论 收藏
分享
像好涩一样好学:这公司我也拿过 基本明确周六加班 工资还凑活 另外下次镜头往上点儿
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务