Cod sursa(job #2021578)

Utilizator mihai.alphamihai craciun mihai.alpha Data 13 septembrie 2017 22:49:39
Problema Pascal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <cstdio>

FILE *fin, *fout;

#define MAX 5000000

int r, d;
int d2[MAX + 1], d3[MAX + 1], d5[MAX + 1];

int main() {
	fin = fopen("pascal.in", "r");
	fout = fopen("pascal.out", "w");
	fscanf(fin, "%d%d", &r, &d);
	int ans = 0, pow2 = 0, pow3 = 0, pow5 = 0;
	for (int i = 1; i <= r; i++) {
		if (i % 2 == 0)
			d2[i] = d2[i / 2] + 1;
		if (i % 3 == 0)
			d3[i] = d3[i / 3] + 1;
		if (i % 5 == 0)
			d5[i] = d5[i / 5] + 1;
	}
	if (d == 2) {
		for (int j = 0; j < r; j++) {
			pow2 += d2[r - j] - d2[j + 1];
			if (pow2 > 0)
				ans++;
		}
	}
	if (d == 3) {
		for (int j = 0; j < r; j++) {
			pow3 += d3[r - j] - d3[j + 1];
			if (pow3 > 0)
				ans++;
		}
	}
	if (d == 4) {
		for (int j = 0; j < r; j++) {
			pow2 += d2[r - j] - d2[j + 1];
			if (pow2 > 1)
				ans++;
		}
	}
	if (d == 5) {
		for (int j = 0; j < r; j++) {
			pow5 += d5[r - j] - d5[j + 1];
			if (pow5 > 0)
				ans++;
		}
	}
	if (d == 6) {
		for (int j = 0; j < r; j++) {
			pow2 += d2[r - j] - d2[j + 1];
			pow3 += d3[r - j] - d3[j + 1];
			if (pow2 > 0 && pow3 > 0)
				ans++;
		}
	}
	fprintf(fout, "%d", ans);
	fclose(fin);
	fclose(fout);
	return 0;
}