Pagini recente » Cod sursa (job #1812403) | Cod sursa (job #1276765) | Cod sursa (job #2878617) | Cod sursa (job #1290298) | Cod sursa (job #1393569)
#include<cstdio>
#include<algorithm>
#include<cstring>
#define Nmax 5000005
using namespace std;
int n,i,j,d,f[Nmax],x,y,z,nr,X,Y,Z,F[Nmax];
int sol;
void solve(int f[Nmax])
{
if (f[i]!=-1) y=f[i];
else
{
nr=i;
while (nr)
y+=(nr/d),nr=nr/d;
f[i]=y;
}
if (f[n-i]!=-1) z=f[n-i];
else
{
nr=n-i;
while (nr)
z+=(nr/d),nr=nr/d;
f[n-i]=z;
}
}
int main()
{
freopen("pascal.in","r",stdin);
freopen("pascal.out","w",stdout);
scanf("%d %d",&n,&d);
nr=n;
memset(f,-1,sizeof(f));
if (d==6)
{ d=2;
while (nr)
x+=(nr/d),nr=nr/d;
f[n]=x;
d=3;
while (nr)
X+=(nr/d),nr=nr/d;
F[n]=X;
}
else if (d==4)
{
d=2;
while (nr)
x+=(nr/d),nr=nr/d;
f[n]=x;
d=2;
while (nr)
X+=(nr/d),nr=nr/d;
F[n]=X;
}else
{
while (nr)
x+=(nr/d),nr=nr/d;
f[n]=x;
}
f[0]=0; F[0]=0;
for (i=1;i<n;i++)
{
y=0; z=0; Y=0; Z=0;
if (d==6)
{
d=2; solve(f);
Y=y; Z=z;
d=3; solve(F);
swap(y,Y); swap(z,Z);
}
else if (d==4)
{
d=2;
solve(f);
d=2; solve(F);
swap(y,Y); swap(z,Z);
}else solve(f);
if (x>y+z && (X>Y+Z || d!=4 || d!=6))
++sol;
}
printf("%d",sol);
return 0;
}