Pagini recente » Cod sursa (job #201881) | Cod sursa (job #1566279) | Cod sursa (job #1248976) | Cod sursa (job #1124507) | Cod sursa (job #444498)
Cod sursa(job #444498)
#include<stdio.h>
#define Max(a,b) a > b ? a : b
#define Min(a,b) a < b ? a : b
#define Inf 1<<30
#define Rmax 5000010
int f[10],i,j,d,D,R,S,m,sol,v[Rmax];
int main()
{
freopen("pascal.in","r",stdin);
freopen("pascal.out","w",stdout);
scanf("%d %d",&R,&D);
for(d=2;d<=D;d++)
{
if(D%d==0)
{
while(D%d==0)
{
f[d]++;
D/=d;
}
}
}
for(i=1;i<=R;i++) v[i]=Inf;
for(d=2;d<6;d++)
if(f[d])
{
for(i=d;i<=R;i*=d)
S+=R/i;
S/=f[d];
v[R]=Min(v[R],S);
}
m=R>>1;
for(d=2;d<6;d++)
if(f[d])
{
for(i=1;i<=R;i++)
{
S=0;
for(j=d;j<=i;j*=d)
S+=i/j;
S/=f[d];
v[i]=Min(v[i],S);
}
}
if(R&1)
{
for(i=1;i<=m;i++)
if(v[R]-v[i]-v[R-i]>0) sol++;
sol<<=1;
}
else
{
for(i=1;i<m;i++);
if(v[R]-v[i]-v[R-i]>0) sol++;
sol<<=1;
if(v[R]-2*v[m]>0) sol++;
}
printf("%d",sol);
return 0;
}