Cod sursa(job #351175)

Utilizator Addy.Adrian Draghici Addy. Data 27 septembrie 2009 10:56:57
Problema Pascal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <stdio.h>
#define DIM 5000003

int v[DIM],w[DIM];
int n,i,j,d,x,y,sol;

int main() {
	
	FILE *f = fopen("pascal.in","r");
	FILE *g = fopen("pascal.out","w");
	
	fscanf(f,"%d%d",&n,&d);
	
	if (d==2 || d==3 || d==5) {
		for (i=1; i<=n; i++) {
			j = i;
			while (j%d==0) {
				v[i]++;
				j /= d;
			}
			v[i] += v[i-1];
		}
		for (i=1; i<=(n-1)/2; i++) {
			x = v[n]-v[i]-v[n-i];
			if (x>0)
				sol++;
		}
		sol *= 2;
		if (n%2==0) {
			j = n/2;
			x = v[n]-v[j]-v[n-j];
			if (x>0)
				sol++;
		}
	}
	else 
		if (d==4) {
			d = 2;
			for (i=1; i<=n; i++) {
				j = i;
				while (j%d==0) {
					v[i]++;
					j /= d;
				}
				v[i] += v[i-1];
			}
			for (i=1; i<=(n-1)/2; i++) {
				x = v[n]-v[i]-v[n-i];
				if (x>1)
					sol++;
			}
			sol *= 2;
			if (n%2==0) {
				j = n/2;
				x = v[n]-v[j]-v[n-j];
				if (x>1)
					sol++;
			}
		}
		else {
			d = 2;
			for (i=1; i<=n; i++) {
				j = i;
				while (j%d==0) {
					v[i]++;
					j /= d;
				}
				v[i] += v[i-1];
			}
			d = 3;
			for (i=1; i<=n; i++) {
				j = i;
				while (j%d==0) {
					w[i]++;
					j /= d;
				}
				w[i] += w[i-1];
			}
			for (i=1; i<=(n-1)/2; i++) {
				x = v[n]-v[i]-v[n-i];
				y = w[n]-w[i]-w[n-i];
				if (x>0 && y>0)
					sol++;
			}
			sol *= 2;
			if (n%2==0) {
				j = n/2;
				x = v[n]-v[j]-v[n-j];
				y = w[n]-w[j]-w[n-j];
				if (x>0)
					sol++;
			}
		}
	
	fprintf(g,"%d",sol);
	
	fclose(f);
	fclose(g);
	
	return 0;
}