Wanafly挑戰賽25 A因子

神探小小迪發表於2018-09-29

連結:https://www.nowcoder.com/acm/contest/197/A
來源:牛客網
 

題目描述

令 X = n!, 給定一大於1的正整數p 求一個k使得 p ^k | X 並且 p ^(k + 1) 不是X的因子。

輸入描述:

兩個數n, p (1e18>= n>= 10000 >= p >= 2)

輸出描述:

一個數
表示k

示例1

輸入

10000 12

輸出

4996

題解:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[1000],b[1000],c[1000];
ll fun(ll n, ll k) {//n!中素因子k的個數
    ll sum = 0;
    while(n) {
        sum += n/k;
        n /= k;
    }
    return sum;
}
int main()
{
    ll n,p;
    while(cin >> n >> p) {
        int pos = 0;
        memset(b, 0, sizeof(b));
        for(ll i = 2; i*i <= p; i++){
            if(p%i == 0) {
                a[pos] = i;
                ll cnt = 0;
                while(p%i == 0)
                    p /= i, cnt++;
                b[pos] = cnt;
                pos++;
            }
        }
        if(p > 1) {
            a[pos]=p, b[pos]=1;
            pos++;
        }
        ll ans = 1e18;
        for(int i = 0; i < pos; i++) {
            c[i] = fun(n, a[i]);
            ll k = c[i] / b[i];
            ans = min(ans, k);
        }
        cout << ans << endl;
    }
    return 0;
}

 

相關文章