Pagini recente » Cod sursa (job #1584762) | Rating Ciubotaru Robin (noMad) | Cod sursa (job #1478527) | Clasament testround | Cod sursa (job #1691408)
#include <cstdio>
int div[4],exp[4],vf[4],vf1[4];
inline void cauta(int *v,int nr,int m){
int i,p;
for(i=0;i<m;i++){
p=div[i];
while(p<=nr){
v[i]=v[i]+nr/p;
p=p*div[i];
}
}
}
int main(){
FILE*fi,*fout;
int i,j,r,d,x,m,e,con,nr;
fi=fopen("pascal.in" ,"r");
fout=fopen("pascal.out" ,"w");
fscanf(fi,"%d%d" ,&r,&d);
x=2;
m=0;
while(x*x<=d){
e=0;
while(d%x==0){
d/=x;
e++;
}
if(e>0){
div[m]=d;
exp[m]=e;
m++;
}
x++;
}
if(d>1){
div[m]=d;
exp[m]=1;
m++;
}
cauta(vf,r,m);
cauta(vf1,r,m);
con=0;
for(j=0;j<(r+1)/2;j++){
i=0;
while(i<m&&vf[i]-vf1[i]>=exp[i])
i++;
if(i==m)
con++;
for(i=0;i<m;i++){
nr=r-j;
while(nr%div[i]==0){
nr/=div[i];
vf1[i]--;
}
nr=j+1;
while(nr%div[i]==0){
nr/=div[i];
vf1[i]++;
}
}
}
con=2*con;
if(r%2==0){
j=r/2;
for(i=0;i<4;i++)
vf1[i]=0;
cauta(vf1,j,m);
cauta(vf1,r-j,m);
i=0;
while(i<m&&vf[i]-vf1[i]>=exp[i])
i++;
if(i==m)
con++;
}
fprintf(fout,"%d" ,con);
fclose(fi);
fclose(fout);
return 0;
}