Pagini recente » Cod sursa (job #3277918) | Cod sursa (job #2945682) | Cod sursa (job #3037992) | Cod sursa (job #30896) | Cod sursa (job #10199)
Cod sursa(job #10199)
#include<cstdio>
long N, sol; int D;
long F(int D, long x);
int main()
{
freopen("pascal.in", "r", stdin);
freopen("pascal.out", "w", stdout);
scanf("%ld %d", &N, &D);
long i, limit, n, m, k, n1, m1, k1;
limit = !(N&1) ? (N>>1) - 1 : (N>>1);
for(i=1; i<=limit; ++i)
{
if(D == 2 || D == 3 || D == 5)
{
n = F(D, N);
m = F(D, N-i);
k = F(D, i);
if( (n-m-k) >= 1 )
++ sol;
}
if(D == 4)
{
n = F(2, N);
m = F(2, N-i);
k = F(2, i);
if( (n-m-k) >= 2 )
++ sol;
}
if(D == 6)
{
n = F(2, N);
m = F(2, N-i);
k = F(2, i);
n1 = F(3, N);
m1 = F(3, N-i);
k1 = F(3, i);
if( (n-m-k) >= 1 && (n1-m1-k1) >= 1 )
++ sol;
}
}
sol <<= 1;
if( !(N&1) )
{
if(D == 2 || D == 3 || D == 5)
{
n = F(D, N);
m = F(D, N>>1) << 1;
if( (n-m) >= 1 )
++ sol;
}
if(D == 4)
{
n = F(2, N);
m = F(2, N>>1) << 1;
if( (n-1) >=2 )
++ sol;
}
if(D == 6)
{
n = F(2, N);
m = F(2, N>>1) << 1;
n1 = F(3, N);
m1 = F(3, N>>1) << 1;
if( (n-m) >= 1 && (n1-m1) >=1 )
++ sol;
}
}
printf("%ld", sol);
fclose(stdin); fclose(stdout);
return 0;
}
long F(int D, long x)
{
long s = 0;
while(x)
{
s += x / D;
x /= D;
}
return s;
}