Pagini recente » Solutii Autumn Warmup, Runda 2 | Cod sursa (job #181) | Cod sursa (job #2932643) | Cod sursa (job #1946244) | Cod sursa (job #217048)
Cod sursa(job #217048)
#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;
for(int i = 1; i <= L; ++i)
{
if(D == 4)
Act = Ant + ((log(2, N - i + 1) - log(2, i)) >> 1);
else if(D == 6)
Act = Ant + min((log(2, N - i + 1) - log(2, i)), (log(3, N - i + 1) - log(3, i)));
else
Act = Ant + log(D, N - i + 1) - log(D, i);
if(Act)
++Sol;
Ant = Act;
}
if(N & 1)
{
printf("%ld\n",2 * Sol);
return;
}
if(Act)
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();
}