Pagini recente » Cod sursa (job #1695568) | Cod sursa (job #1669022) | Cod sursa (job #1770404) | Cod sursa (job #2730960) | Cod sursa (job #350565)
Cod sursa(job #350565)
#include <stdio.h>
#define DIM 5000002
int V[2][DIM];
int r,d,sol,i,k;
int min(int a, int b) {
return a<b?a:b;
}
int main() {
FILE *f = fopen("pascal.in","r");
FILE *g = fopen("pascal.out","w");
fscanf(f,"%d%d",&r,&d);
if (d==2 || d==3 || d==5) {
for (i=1; i<=r; i++) {
k = i;
while (k%d==0) {
V[0][i]++;
k /= d;
}
V[0][i] += V[0][i-1];
}
for (k=1; k<=(r+1)/2-1; k++)
if (V[0][r]-V[0][k]-V[0][r-k]>0)
sol += 2;
if (r%2==0) {
k = r/2;
if (V[0][r]-V[0][k]-V[0][r-k]>0)
sol++;
}
}
else
if (d==4) {
d = 2;
for (i=1; i<=r; i++) {
k = i;
while (k%d==0) {
V[0][i]++;
k /= d;
}
V[0][i] += V[0][i-1];
}
for (k=1; k<=(r+1)/2-1; k++)
if (V[0][r]-V[0][k]-V[0][r-k]>1)
sol += 2;
if (r%2==0) {
k = r/2;
if (V[0][r]-V[0][k]-V[0][r-k]>1)
sol++;
}
}
else
if (d==6) {
d = 2;
for (i=1; i<=r; i++) {
k = i;
while (k%d==0) {
V[0][i]++;
k /= d;
}
V[0][i] += V[0][i-1];
}
d = 3;
for (i=1; i<=r; i++) {
k = i;
while (k%d==0) {
V[1][i]++;
k /= d;
}
V[1][i] += V[1][i-1];
}
for (k=1; k<=(r+1)/2-1; k++)
if (min(V[0][k],V[1][k])>0)
sol += 2;
if (r%2==0) {
k = r/2;
if (min(V[0][k],V[1][k])>0)
sol += 1;
}
}
fprintf(g,"%d",sol);
fclose(f);
fclose(g);
return 0;
}