Cod sursa(job #1067289)

Utilizator Robert29FMI Tilica Robert Robert29 Data 26 decembrie 2013 17:37:12
Problema Pascal Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <stdio.h>
FILE*f = fopen("pascal.in", "r");
FILE*g = fopen("pascal.out", "w");
int  v2[5000005], v3[5000005], v5[5000005];
int fact(int a, int b){
	int z = 0;
	while (a%b == 0){
		a /= b;
		z++;
	}
	return z;
}
int main() {
	int r, d;
	fscanf(f, "%d%d", &r, &d);
	for (register int i = 1; i <= r + 1; i++){
		v2[i] = v2[i - 1] + fact(i, 2);
		v3[i] = v3[i - 1] + fact(i, 3);
		v5[i] = v5[i - 1] + fact(i, 5);
	}
	int r2=0, r3=0, r5=0;
	if (d == 2)
		r2 = 1;
	else
	if (d == 3)
		r3 = 1;
	else
	if (d == 4)
		r2 = 2;
	else
	if (d == 5)
		r5 = 1;
	else{
		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&&v5[r] - v5[r - i] - v5[i] >= r5)
			nr++;
	nr *= 2;
	if (r % 2 == 0)
		if (v2[r] - v2[r - i] - v2[i] >= r2&&v3[r] - v3[r - i] - v3[i] >= r3&&v5[r] - v5[r - i] - v5[i] >= r5)
			nr++;

	fprintf(g, "%d", nr);

	fclose(f);
	fclose(g);
	return 0;
}