Pagini recente » Cod sursa (job #2329743) | Cod sursa (job #2058089) | Cod sursa (job #1105174) | Cod sursa (job #132296) | Cod sursa (job #444504)
Cod sursa(job #444504)
#include<stdio.h>
#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,dp[5],aux,P;
long long v[Rmax],Fact[2][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)
{
dp[++P]=d;
while(D%d==0)
{
f[d]++;
D/=d;
}
}
}
for(i=0;i<P;i++)
for(j=1;j<=R;j++)
{
aux=j; S=0;
while(aux%dp[i+1]==0) {S++; aux/=dp[i+1];}
Fact[i][j]=Fact[i][j-1]+S;
}
for(j=1;j<=R;j++)
{
v[j]=Inf;
for(i=0;i<P;i++)
{
Fact[i][j]/=f[dp[i+1]];
if(Fact[i][j]<v[j]) v[j]=Fact[i][j];
}
}
m=R>>1;
for(i=1;i<=m;i++)
if(v[R]-v[i]-v[R-i]>0) sol++;
sol<<=1;
if(!(R&1))
{
if(v[R]-2*v[m]>0) sol--;
}
printf("%d",sol);
return 0;
}