Cod sursa(job #424967)

Utilizator Cristy94Buleandra Cristian Cristy94 Data 25 martie 2010 13:09:49
Problema Descompuneri Scor 12
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include<stdio.h>
FILE *f=fopen("desc.in","r");
FILE *g=fopen("desc.out","w");
long long div[1001],n,k,a[1001][1001],nrdiv,i,j,p,x,y,u,m;
void divide(){
	for(long long d=2;d<=n/2;d++)
		if(n%d==0){
			div[0]++;
			div[div[0]]=d;
		}
div[0]++;
div[div[0]]=n;
nrdiv=div[0];
	
}
int main(){
	//citire
fscanf(f,"%lld%lld",&n,&k);
    //divizorii lui n
divide();
    //initializam prima linie cu 1
for(i=1;i<=nrdiv;i++)
	 a[1][i]=1;

for(i=2;i<=nrdiv;i++)
	for(j=1;j<=nrdiv;j++){
		a[i][j]=a[i][j-1]; //valoarea anterioara
		if(i>=j&&div[i]%div[j]==0) //daca se imparte
		{  y=div[i]/div[j]; //trebuie sa cautam pozitia divizorului p
		   //cautare binara//
		   if(y==1)
             x=1;
		   else{
			p=1;
			u=nrdiv;
			while(p<=u){
				m=(p+u)/2;
				if(div[m]>y)
				 u=m-1;
				else if(div[m]<y)
					  p=m+1;
				else { x=m; break; }  
			}
		   }
		   a[i][j]+=a[x][j];
		}
}
fprintf(g,"%lld",a[nrdiv][nrdiv]);	
return 0;
}