题目地址:http://ac.jobdu.com/problem.php?pid=1104
给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除。
两个整数n(2<=n<=1000),a(2<=a<=1000)
一个整数.
6 10
1
#include <stdio.h> #include <string.h> #include <math.h> int IsPrime (int n){ if (n <= 1) return 0; int sq = (int)sqrt((double)n); while (sq >= 2){ if (n % sq == 0) break; --sq; } return (sq >= 2) ? 0 : 1; } void Initialize(int Prime[], int n, int * primeSize){ int index = 1; int num = 3; Prime[0] = 2; while (num < n){ if (IsPrime (num)){ Prime[index] = num; ++index; } num += 2; } *primeSize = index; } int main(void){ int n, a; int Prime[200]; int primeSize; int cnt1[200], cnt2[200]; int tmp; int i; Initialize(Prime, 1000, &primeSize); while (scanf ("%d%d", &n, &a) != EOF){ memset (cnt1, 0, sizeof(cnt1)); memset (cnt2, 0, sizeof(cnt2)); for (i=0; i<primeSize; ++i){ tmp = n; while (tmp){ cnt1[i] += tmp / Prime[i]; tmp /= Prime[i]; } } int ans = 10000000; for (i=0; i<primeSize; ++i){ while (a % Prime[i] == 0){ ++cnt2[i]; a /= Prime[i]; } if (cnt2[i] == 0) continue; if (cnt1[i] / cnt2[i] < ans) ans = cnt1[i] / cnt2[i]; } printf ("%d\n", ans); } return 0; }
原文:http://blog.csdn.net/jdplus/article/details/19413037