//郁闷死了,一直不对,参看了http://d.hatena.ne.jp/iakasT/20090728/1248747977 //感谢日本人,我对数学函数用的还是不行啊 #include <iostream> #include <cmath> #include <climits> using namespace std; int trailzero(int num,int base) { unsigned max = UINT_MAX,factordim,i; for (i = 2; i <= base; ++i) { factordim = 0; while (base % i == 0) { factordim++; base /= i; } if (factordim > 0) { int numfactor = 0,j = i; for ( ; j <= num; j *= i) numfactor += num / j; if (max > numfactor / factordim) max = numfactor / factordim; } } return max; } double dignum(int num, int base) { double sum = 0,temp; for (int i = 2; i <= num; ++i) { temp = i; sum += log(temp); } temp = base; return ceil(sum/log(temp)+1e-10); //这里不能写成ceil(sum/log(temp)); } int main() { int N,B; while (scanf("%d %d",&N,&B) != EOF) { if (N == 1) { printf("0 1/n"); continue; } printf("%u %.lf/n",trailzero(N,B),dignum(N,B)); } return 0; }