Pagini recente » Cod sursa (job #3002301) | Cod sursa (job #852510) | Cod sursa (job #701135) | Cod sursa (job #2651051) | Cod sursa (job #1073701)
#include <stdio.h>
#define dim 5000005
FILE*f = fopen("pascal.in", "r");
FILE*g = fopen("pascal.out", "w");
int v2[dim], v3[dim];
char div2[dim], div3[dim];
int main() {
int r, d;
fscanf(f, "%d%d", &r, &d);
if (d <6)
{
int r2 = 1;
if (d == 4)
{
r2 = 2;
d = 2;
}
for (register int i = 1; i <= r + 1; i++)
{
if (!(i%d))
div2[i] = div2[i / d] + 1;
v2[i] = v2[i - 1] + div2[i];
}
int i, nr = 0;
int n = (r + 1) >> 1;
for (i = 1; i < n; i++)
if (v2[r] - v2[r - i] - v2[i] >= r2)
nr++;
nr <<= 1;
if (!(r & 1))
if (v2[r] - v2[r - i] - v2[i] >= r2)
nr++;
fprintf(g, "%d", nr);
}
else
{
for (register int i = 1; i <= r + 1; i++)
{
if (!(i&1))
div2[i] = div2[i >> 1] + 1;
if (!(i%3))
div3[i] = div3[i / 3] + 1;
v2[i] = v2[i - 1] + div2[i];
v3[i] = v3[i - 1] + div3[i];
}
int r2 = 0, r3 = 0;
r2 = 1;
r3 = 1;
int i, nr = 0;
int n = (r + 1) >> 1;
for (i = 1; i < n; i++)
if (v2[r] - v2[r - i] - v2[i] >= r2&&v3[r] - v3[r - i] - v3[i] >= r3)
nr++;
nr <<= 1;
if (!(r & 1))
if (v2[r] - v2[r - i] - v2[i] >= r2&&v3[r] - v3[r - i] - v3[i] >= r3)
nr++;
fprintf(g, "%d", nr);
}
fclose(f);
fclose(g);
return 0;
}