//利用质因数分解的方法 #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")