Pagini recente » Solutii Autumn Warmup, Runda 2 | Solutii Autumn Warmup, Runda 2 | Cod sursa (job #1245667) | Solutii Autumn Warmup, Runda 2 | Cod sursa (job #217077)
Cod sursa(job #217077)
#include <cstdio>
long N, Sol;
int D;
inline long min(long a, long b)
{
return (a < b)? a : b;
}
long log(int baza, long nr)
{
long put = 0;
while(1)
{
if(nr % baza)
return put;
nr /= baza;
put++;
}
}
void solve()
{
int L = N >> 1;
long Ant = 0, Act, Ant2 = 0, Act2, t = 1;
for(int i = 1; i <= L; ++i)
{
if(D == 4)
Act = Ant + log(2, N - i + 1) - log(2, i), Act2 = 1, t = 2;
else if(D == 6)
{
Act = Ant + log(2, N - i + 1) - log(2, i);
Act2 = Ant2 + log(3, N - i + 1) - log(3, i);
}
else
Act = Ant + log(D, N - i + 1) - log(D, i), Act2 = 1;
if(Act/t && Act2)
++Sol;
Ant = Act;
Ant2 = Act2;
}
if(Sol == 0)
{
printf("0\n");
return;
}
if(N & 1)
{
printf("%ld\n",2 * Sol);
return;
}
if(Act/t && Act2)
printf("%ld\n",2 * Sol - 1);
else
printf("%ld\n",2 * Sol);
}
int main()
{
freopen("pascal.in","rt",stdin);
freopen("pascal.out","wt",stdout);
scanf("%ld %d",&N, &D);
solve();
}