Pagini recente » Cod sursa (job #1158544) | Cod sursa (job #2877392) | Cod sursa (job #2185554) | Cod sursa (job #2457169) | Cod sursa (job #217065)
Cod sursa(job #217065)
#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;
for(int i = 1; i <= L; ++i)
{
if(D == 4)
Act = Ant + ((log(2, N - i + 1) - log(2, i)) >> 1), Act2 = 1;
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 > 0 && Act2 > 0)
++Sol;
Ant = Act;
Ant2 = Act2;
}
if(N & 1)
{
printf("%ld\n",2 * Sol);
return;
}
if(Act && 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();
}