-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy path10061.cpp
More file actions
81 lines (77 loc) · 927 Bytes
/
10061.cpp
File metadata and controls
81 lines (77 loc) · 927 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include<stdio.h>
#include<math.h>
#define eps 1e-9
#define si 35
int ara[si],pr[si],ll=1,res[910],store[910];
void sieve()
{
int num=si-5,i,j,root;
root=sqrt(num);
ara[0]=ara[1]=1;
pr[ll++]=2;
for(i=3;i<=num;i=i+2)
{
if(ara[i]==0)
{
pr[ll++]=i;
if(i<=root)
{
for(j=i*i;j<=num;j+=2*i)
ara[j]=1;
}
}
}
}
int main()
{
long n,k,b,i,sm,a,mx,l,cnt,j;
double d,x;
sieve();
while(~scanf("%ld%ld",&n,&b))
{
l=sqrt(b)+1;
a=b;
j=1;
for(i=1;pr[i]<=l&&i<ll;i++)
{
if(a%pr[i]==0)
{
mx=pr[i];
cnt=0;
while(a%pr[i]==0)
{
cnt++;
a/=mx;
}
}
if(a==1)
break;
}
if(a>1)
{
mx=a;
cnt=1;
}
k=1;
sm=0;
while(1)
{
a=pow(mx,k);
a=n/a;
if(!a)
break;
sm+=a;
k++;
}
sm/=cnt;
d=0;
for(i=1;i<=n;i++)
{
x=log10(i)/log10(b);
d+=(x+eps);
}
d=floor(d)+1;
printf("%d %.0lf\n",sm,d);
}
return 0;
}