时间限制:1 秒内存限制:32 兆特殊判题:否提交:5078解决:1699
题目描述:
给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除。
输入:
两个整数n(2<=n<=1000),a(2<=a<=1000)
输出:
一个整数.
样例输入:
6 10
样例输出:
1
#include<climits>
#include<iostream>
#include<cmath>
#include<map>
#include<algorithm>
using namespace std;
int n, a;
int calnum(int num, int fac){
int ret = 0;
while (num%fac==0)
ret++,num /= fac;
return ret;
}
int isPrime(int x){
int a = int(sqrt(double(x)));
for (int i = 2; i <= a; i++)
if (x%i==0)return 0;
return 1;
}
int main(){
while (cin >> n >> a){
map<int, int> fac, cnt;
for (int i = 2; i <= a; i++)
if (a%i == 0 && isPrime(i))fac[i] = calnum(a, i);
for (int i = 2; i <= n; i++)
for (map<int, int>::iterator x = fac.begin(); x != fac.end(); x++)
cnt[x->first] += calnum(i, x->first);
int ret = INT_MAX;
for (map<int, int>::iterator x = cnt.begin(); x != cnt.end(); x++)
ret = min(ret, x->second / fac[x->first]);
cout << ret << endl;
}
return 0;
}