Cod sursa(job #350564)

Utilizator Addy.Adrian Draghici Addy. Data 24 septembrie 2009 19:48:02
Problema Pascal Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <stdio.h>
#include <stdlib.h>
#define DIM 5000001

int v[DIM],w[DIM];
int n,d,d1,d2,i,j,k,nr,dd,ddw,r,t;

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