Pagini recente » Cod sursa (job #2482629) | Cod sursa (job #1312639) | Cod sursa (job #2559993) | Cod sursa (job #648224) | Cod sursa (job #508417)
Cod sursa(job #508417)
#include <stdio.h>
int I, J, M, D, P, Nr, F[3] = {1, 1, 1}, FI[3];
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 div (int d)
{
F[d] = FI[d];
F[d] -= factori (I - J, ciur[d]);
F[d] -= factori (J, ciur[d]);
if (F[d] >= 1) P *= ciur[d];
if (F[d] >= 2) P *= ciur[d];
}
int main ()
{
freopen ("pascal.in", "r", stdin);
freopen ("pascal.out", "w", stdout);
scanf ("%d%d", &I, &D);
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]);
M = I / 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++;
}
/* int d;
for (J = 1; J < I; ++J)
{
P = 1;
for (d = 0; d < 3; ++d)
{
F[d] = factori (I, ciur[d]);
F[d] -= factori (I - J, ciur[d]);
F[d] -= factori (J, ciur[d]);
if (F[d] >= 1) P *= ciur[d];
if (F[d] >= 2) P *= ciur[d];
}
if (P % D == 0) Nr++;
}
*/
printf ("%d", Nr);
return 0;
}