#include<bits/stdc++.h>
using namespace std;
#define FR0(i,N) for(i=0;i<(N);i++)
#define FR1(i,N) for(i=1;i<=(N);i++)
#define FRN(i,k,N) for(i=k;i<(N);i++)
#define pf printf
#define db double
#define max3(a,b,c) max(max(a,b),c)
#define min3(a,b,c) min(min(a,b),c)
#define sci(n) scanf("%d",&n)
#define scl(n) scanf("%lld",&n)
#define scf(n) scanf("%f",&n)
#define scd(n) scanf("%lf",&n)
#define scs(s) scanf("%s",&s)
#define scll(n) scanf("%%I64d",&n)
#define PI acos(-1.0)
#define LL long long
#define MX 1000005
#define MOD 1000000007
#define forit(i, a) for ( __typeof( a.begin() ) i = a.begin(); i != a.end(); i++ )
/*
1) Find number of trailing zeroes
Factorize the base and the factorial. Actually you don't have to factorize the factorial completely. Just calculate the prime factors present in the base.
e.g. in base 10, 10 = 2 * 5
100! contains:
2^(some number that I didn't compute) * 5 ^ 24. Obviously, 5 is the limiting factor here and thus the number of trailing zeroes is 24. (Other prime factors not in base are not important).
(2) Find number of digits in base representation
Use log. When logged by a certain base, you will get the number of digits in the representation of the number in that base (round down).
e.g. log (base 10) 89 = 2.???, therefore the number of digits is 2 (for 89 represented in decimal).
Two basic identities:
log (base x) (some_value) = ln (some_value) / ln x (ln = natural log)
log ab = log a + log b
(naturally implies log n! = log 1 + log 2 + log 3 + log 4 + ... + log n which is one way to attack this problem)
*/
typedef long long int ll;
bool status[ 1100002 ] ;
vector< int > prime;
void siv( )
{
int N= 30 ;
for ( int i= 2 ; i< N; i++ )
{
prime.push_back ( i) ;
for ( int j= 2 ; j< i; j++ )
{
if ( i% j== 0 )
{
prime.pop_back ( ) ;
break ;
}
}
}
}
void prime_factorization( int n,map< int ,int > & f)
{
for ( int i= 0 ; i< prime.size ( ) ; i++ )
{
if ( n== 1 ) break ;
while ( n% prime[ i] == 0 )
{
f[ prime[ i] ] ++ ;
n/ = prime[ i] ;
}
}
if ( n! = 1 ) f[ n] ++ ;
}
int count( int n,int f)
{
int ret= 0 ;
while ( n)
{
ret+ = n/ f;
n/ = f;
}
return ret;
}
int main( )
{
siv( ) ;
int n,b;
while ( cin >> n>> b)
{
map< int ,int > f;
prime_factorization( b,f) ;
int zero= INT_MAX ;
forit( it,f)
{
zero= min( zero,count( n,it- > first) / it- > second) ;
}
double digit= 0.0 ;
for ( int i= 1 ; i<= n; i++ )
{
digit+ = log ( i) / log ( b) ;
}
pf( "%d %d\n " ,zero,( int ) floor ( digit+ 1e-9 ) + 1 ) ;
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBGUjAoaSxOKSBmb3IoaT0wO2k8KE4pO2krKykKI2RlZmluZSBGUjEoaSxOKSBmb3IoaT0xO2k8PShOKTtpKyspCiNkZWZpbmUgRlJOKGksayxOKSBmb3IoaT1rO2k8KE4pO2krKykKI2RlZmluZSBwZiBwcmludGYKI2RlZmluZSBkYiBkb3VibGUKI2RlZmluZSBtYXgzKGEsYixjKSBtYXgobWF4KGEsYiksYykKI2RlZmluZSBtaW4zKGEsYixjKSBtaW4obWluKGEsYiksYykKI2RlZmluZSBzY2kobikgc2NhbmYoIiVkIiwmbikKI2RlZmluZSBzY2wobikgc2NhbmYoIiVsbGQiLCZuKQojZGVmaW5lIHNjZihuKSBzY2FuZigiJWYiLCZuKQojZGVmaW5lIHNjZChuKSBzY2FuZigiJWxmIiwmbikKI2RlZmluZSBzY3Mocykgc2NhbmYoIiVzIiwmcykKI2RlZmluZSBzY2xsKG4pIHNjYW5mKCIlJUk2NGQiLCZuKQojZGVmaW5lIFBJIGFjb3MoLTEuMCkKI2RlZmluZSBMTCBsb25nIGxvbmcKI2RlZmluZSBNWCAxMDAwMDA1CiNkZWZpbmUgTU9EIDEwMDAwMDAwMDcKI2RlZmluZSBmb3JpdChpLCBhKSBmb3IgKCBfX3R5cGVvZiggYS5iZWdpbigpICkgaSA9IGEuYmVnaW4oKTsgaSAhPSBhLmVuZCgpOyBpKysgKQovKgoxKSBGaW5kIG51bWJlciBvZiB0cmFpbGluZyB6ZXJvZXMgCgpGYWN0b3JpemUgdGhlIGJhc2UgYW5kIHRoZSBmYWN0b3JpYWwuIEFjdHVhbGx5IHlvdSBkb24ndCBoYXZlIHRvIGZhY3Rvcml6ZSB0aGUgZmFjdG9yaWFsIGNvbXBsZXRlbHkuIEp1c3QgY2FsY3VsYXRlIHRoZSBwcmltZSBmYWN0b3JzIHByZXNlbnQgaW4gdGhlIGJhc2UuIAoKZS5nLiBpbiBiYXNlIDEwLCAxMCA9IDIgKiA1IAoxMDAhIGNvbnRhaW5zOiAKMl4oc29tZSBudW1iZXIgdGhhdCBJIGRpZG4ndCBjb21wdXRlKSAqIDUgXiAyNC4gT2J2aW91c2x5LCA1IGlzIHRoZSBsaW1pdGluZyBmYWN0b3IgaGVyZSBhbmQgdGh1cyB0aGUgbnVtYmVyIG9mIHRyYWlsaW5nIHplcm9lcyBpcyAyNC4gKE90aGVyIHByaW1lIGZhY3RvcnMgbm90IGluIGJhc2UgYXJlIG5vdCBpbXBvcnRhbnQpLiAKCigyKSBGaW5kIG51bWJlciBvZiBkaWdpdHMgaW4gYmFzZSByZXByZXNlbnRhdGlvbiAKClVzZSBsb2cuIFdoZW4gbG9nZ2VkIGJ5IGEgY2VydGFpbiBiYXNlLCB5b3Ugd2lsbCBnZXQgdGhlIG51bWJlciBvZiBkaWdpdHMgaW4gdGhlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBudW1iZXIgaW4gdGhhdCBiYXNlIChyb3VuZCBkb3duKS4gCgplLmcuIGxvZyAoYmFzZSAxMCkgODkgPSAyLj8/PywgdGhlcmVmb3JlIHRoZSBudW1iZXIgb2YgZGlnaXRzIGlzIDIgKGZvciA4OSByZXByZXNlbnRlZCBpbiBkZWNpbWFsKS4gCgpUd28gYmFzaWMgaWRlbnRpdGllczogCgpsb2cgKGJhc2UgeCkgKHNvbWVfdmFsdWUpID0gbG4gKHNvbWVfdmFsdWUpIC8gbG4geCAobG4gPSBuYXR1cmFsIGxvZykgCgpsb2cgYWIgPSBsb2cgYSArIGxvZyBiIAoobmF0dXJhbGx5IGltcGxpZXMgbG9nIG4hID0gbG9nIDEgKyBsb2cgMiArIGxvZyAzICsgbG9nIDQgKyAuLi4gKyBsb2cgbiB3aGljaCBpcyBvbmUgd2F5IHRvIGF0dGFjayB0aGlzIHByb2JsZW0pIAoqLwp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgbGw7CmJvb2wgc3RhdHVzWzExMDAwMDJdOwp2ZWN0b3I8aW50PnByaW1lOwp2b2lkIHNpdigpCnsKICAgIGludCBOPTMwOwogICAgZm9yKGludCBpPTI7IGk8TjsgaSsrKQogICAgewogICAgICAgIHByaW1lLnB1c2hfYmFjayhpKTsKICAgICAgICBmb3IoaW50IGo9MjsgajxpOyBqKyspCiAgICAgICAgewogICAgICAgICAgICBpZihpJWo9PTApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHByaW1lLnBvcF9iYWNrKCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQp2b2lkIHByaW1lX2ZhY3Rvcml6YXRpb24oaW50IG4sbWFwPGludCxpbnQ+JmYpCnsKICAgIGZvcihpbnQgaT0wO2k8cHJpbWUuc2l6ZSgpO2krKykKICAgIHsKICAgICAgICBpZihuPT0xKSBicmVhazsKICAgICAgICB3aGlsZShuJXByaW1lW2ldPT0wKQogICAgICAgIHsKICAgICAgICAgICAgZltwcmltZVtpXV0rKzsKICAgICAgICAgICAgbi89cHJpbWVbaV07CiAgICAgICAgfQogICAgfQogICAgaWYobiE9MSkgZltuXSsrOwp9CmludCBjb3VudChpbnQgbixpbnQgZikKewogICAgaW50IHJldD0wOwogICAgd2hpbGUobikKICAgIHsKICAgICAgICByZXQrPW4vZjsKICAgICAgICBuLz1mOwogICAgfQogICAgcmV0dXJuIHJldDsKfQppbnQgbWFpbigpCnsKIHNpdigpOwogaW50IG4sYjsKIHdoaWxlKGNpbj4+bj4+YikKIHsKICAgICBtYXA8aW50LGludD5mOwogICAgIHByaW1lX2ZhY3Rvcml6YXRpb24oYixmKTsKICAgICBpbnQgemVybz1JTlRfTUFYOwogICAgIGZvcml0KGl0LGYpCiAgICAgewogICAgICAgIHplcm89bWluKHplcm8sY291bnQobixpdC0+Zmlyc3QpL2l0LT5zZWNvbmQpOwogICAgIH0KICAgICBkb3VibGUgZGlnaXQ9MC4wOwogICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKQogICAgIHsKICAgICAgICAgZGlnaXQrPWxvZyhpKS9sb2coYik7CiAgICAgfQogICAgIHBmKCIlZCAlZFxuIix6ZXJvLChpbnQpZmxvb3IoZGlnaXQrMWUtOSkrMSk7CiB9Cn0K