1. 程式人生 > >HihoCoder - 1789:階乘問題 (簡單數學)

HihoCoder - 1789:階乘問題 (簡單數學)

描述

給定 n, k,求一個最大的整數 m,使得 km 是 n! 的約數

輸入

第一行兩個正整數 n, k

2 ≤ n,k ≤ 109

輸出

輸出最大的 m

樣例輸入
5 2
樣例輸出
3

 

思路:我們知道一個素數在階乘裡的冪次就是一直除就好了。 這題通過率低,是因為直接把K拿來除了,注意這裡要是素數才行。 

所以我們分解求最小即可。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll ans
=1000000000; ll get(int a,int n) { ll res=0; while(n){ res+=n/a; n/=a; } return res; } int main() { int N,K; scanf("%d%d",&N,&K); for(int i=2;i*i<=K;i++){ if(K%i==0){ int num=0; while(K%i==0) num++,K/=i; ans=min(ans,get(i,N)/num); } }
if(K>1) ans=min(ans,get(K,N)); printf("%lld\n",ans); return 0; }