UVA-10061
#include <iostream> #include <cstdio> #include <cstring> #include <string> #include <cmath> #include <cctype> #include <algorithm> #include <sstream> using namespace std; int x,y; int f1(){ int da=2,xx=y,i=2,count1=0; while (xx>1) { if(xx%i==0){ xx=xx/i; da=i; count1++; }else{ i++; count1=0; } } int count2=0; for(i=2;i<=x;i++){ int p=i; while (p>1) { if(p%da==0){ p=p/da; count2++; }else break; } } return count2/count1; } // 首先计算位数,log(n)/log(b) + 1就是n在b进制下有多少位,而log有个公式就是log(M×N) = logM + logN, //n! 的位数用公式可以化为( log(1) + log(2) +...+log(n) ) / log(b) + 1,为了精确再加 10^-6。 int f2(){ double s=0; for(int i=2;i<=x;i++){ s+=log(i); } s=s/log(y)+1; //cout<<s<<endl; return int(s); } int main(){ while (cin>>x>>y) { cout<<f1()<<" "<<f2()<<endl; } return 0; }