Pagini recente » Cod sursa (job #3223931) | Cod sursa (job #1577168) | Cod sursa (job #2810555) | Cod sursa (job #1259792) | Cod sursa (job #509158)
Cod sursa(job #509158)
#include <stdio.h>
int I, J, M, D, P, C, Nr, FI[3], F[3][25];//00000];
int ciur[] = {2, 3, 5};
int factori (int X, int D)
{
int P = 1, N = 0;
while (P <= X)
N += X / (P *= D);
return N;
}
int factori1 (int X, int D)
{
int N = 0;
while (X % D == 0)
++N, X /= D;
return N;
}
void div (int d)
{
C = FI[d] - F[d][J] - F[d][I - J];
if (C >= 1) P *= ciur[d];
if (C >= 2) P *= ciur[d];
}
int main ()
{
freopen ("pascal.in", "r", stdin);
freopen ("pascal.out", "w", stdout);
scanf ("%d%d", &I, &D);
M = I / 2;
for (J = 1; J <= M + 1; ++J)
{
if (D == 2 || D == 4 || D == 6)
F[0][J] = F[0][J - 1] + factori1 (J, ciur[0]);
if (D == 3 || D == 6)
F[1][J] = F[1][J - 1] + factori1 (J, ciur[1]);
if (D == 5)
F[2][J] = F[2][J - 1] + factori1 (J, ciur[2]);
}
if (D == 2 || D == 4 || D == 6)
FI[0] = factori (I, ciur[0]);
if (D == 3 || D == 6)
FI[1] = factori (I, ciur[1]);
if (D == 5)
FI[2] = factori (I, ciur[2]);
if ( !(I & 1) ) M--;
for (J = 1; J <= M; ++J)
{
P = 1;
if (D == 2 || D == 4 || D == 6)
div (0);
if (D == 3 || D == 6)
div (1);
if (D == 5)
div (2);
if (P % D == 0) Nr++;
}
Nr += Nr;
if ( !(I & 1) )
{
J = M + 1;
P = 1;
if (D == 2 || D == 4 || D == 6)
div (0);
if (D == 3 || D == 6)
div (1);
if (D == 5)
div (2);
if (P % D == 0) Nr++;
}
printf ("%d", Nr);
return 0;
}