Pagini recente » Cod sursa (job #3177812) | Cod sursa (job #3273239) | Cod sursa (job #1384136) | Cod sursa (job #2108116) | Cod sursa (job #424967)
Cod sursa(job #424967)
#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;
}