Cod sursa(job #1067940)

Utilizator Robert29FMI Tilica Robert Robert29 Data 27 decembrie 2013 18:05:37
Problema Pascal Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 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);
	if (d <6)
	{
		int r2 = 1;
		if (d == 4)
		{
			r2 = 2;
			d = 2;
		}
			
		for (register int i = 1; i <= r + 1; i++)
		{
			v2[i] = v2[i - 1] + fact(i, d);
		}
		
		
		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 % 2 == 0)
		if (v2[r] - v2[r - i] - v2[i] >= r2)
			nr++;

		fprintf(g, "%d", nr);
	}
	else
	{
		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);
		}
		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 % 2 == 0)
		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;
}