Pagini recente » Cod sursa (job #523184) | Cod sursa (job #56453) | Cod sursa (job #579124) | Cod sursa (job #2630681) | Cod sursa (job #444522)
Cod sursa(job #444522)
#include<stdio.h>
#define Inf 1<<30
#define Rmax 5000010
int f[10],i,j,d,D,R,S,m,sol,dp[5],aux,P,Desc,Sc,Fact[2][Rmax];
int main()
{
freopen("pascal.in","r",stdin);
freopen("pascal.out","w",stdout);
scanf("%d %d",&R,&D);
if(R<=1) {printf("0"); return 0;}
for(d=2;d<=D;d++)
{
if(D%d==0)
{
dp[P]=d;
while(D%d==0)
{
f[P]++;
D/=d;
}
P++;
}
}
for(i=0;i<P;i++)
for(j=1;j<=R;j++)
{
aux=j; S=0;
while(aux%dp[i]==0) {S++; aux/=dp[i];}
Fact[i][j]=Fact[i][j-1]+S;
}
Desc=Inf;
for(i=0;i<P;i++)
{
S=Fact[i][R]/f[i];
if(S<Desc) Desc=S;
}
m=R>>1;
for(i=1;i<=m;i++)
{
Sc=Inf;
for(j=0;j<P;j++)
{
S=(Fact[j][i]+Fact[j][R-i])/f[j];
if(S<Sc) Sc=S;
}
if(Desc-Sc>0) sol++;
}
sol<<=1;
if(!(R&1))
{
Sc=Inf;
for(i=0;i<P;i++)
{
S=2*Fact[i][m]/f[i];
if(S<Desc) Sc=S;
}
if(Desc-Sc>0) sol--;
}
printf("%d",sol);
return 0;
}