Pagini recente » Clasament trainingtsa3 | Cod sursa (job #2860318) | Cod sursa (job #1840755) | Cod sursa (job #1435707) | Cod sursa (job #1217368)
#include <cstdio>
#define Nmax 5000005
using namespace std;
int logg[Nmax],dp[Nmax];
bool viz[Nmax];
int main()
{
int N,D,d,i,sol=0;
freopen ("pascal.in","r",stdin);
freopen ("pascal.out","w",stdout);
scanf("%d%d", &N,&D);
if(D!=6)
{
if(D==4)
d=2;
else
d=D;
logg[d]=1;
for(i=d+1;i<=N;++i)
if(i%d==0)
logg[i]=logg[i/d]+1;
for(i=2;i<=N;++i)
dp[i]=dp[i-1]+logg[i];
for(i=0;i<=N;++i)
{
if(D==4)
{
if(dp[N]-dp[i]-dp[N-i]>1)
++sol;
}
else
if(dp[N]>dp[i]+dp[N-i])
++sol;
}
printf("%d\n", sol);
}
else
{
d=2;
logg[0]=logg[1]=0; logg[d]=1;
for(i=d+1;i<=N;++i)
if(i%d==0)
logg[i]=logg[i/d]+1;
for(i=2;i<=N;++i)
dp[i]=dp[i-1]+logg[i];
for(i=0;i<=N;++i)
if(dp[N]>dp[i]+dp[N-i])
viz[i]=true;
else
viz[i]=false;
d=3;
logg[0]=logg[1]=logg[2]=0; logg[d]=1;
for(i=d+1;i<=N;++i)
if(i%d==0)
logg[i]=logg[i/d]+1;
else
logg[i]=0;
for(i=2;i<=N;++i)
dp[i]=dp[i-1]+logg[i];
for(i=0;i<=N;++i)
if(dp[N]>dp[i]+dp[N-i] && viz[i])
++sol;
printf("%d\n", sol);
}
return 0;
}