Pagini recente » Cod sursa (job #2338017) | Borderou de evaluare (job #2008081) | Cod sursa (job #3235276) | Cod sursa (job #931017) | Cod sursa (job #796241)
Cod sursa(job #796241)
#include <stdio.h>
#define min(a,b) a<b?a:b
int c[5000100];
int D,n;
int legendre(int n,int k)
{
int s=0;
int p=k;
while(p<=n)
{
s+=(n/p);
p=p*k;
}
return s;
}
int a;
int sol;
int d[10];
int main()
{
freopen("pascal.in","r",stdin);
freopen("pascal.out","w",stdout);
scanf("%d%d",&n,&D);
/*if(d==6)
a=legendre(n,2)+legendre(n,3);
else if(d==4)
a=legendre(n,2)/2;
else
a=legendre(n,d);
c[0]=0;
for(int i=1;i<=n;i++)
{
if(i%d==0)
{
c[i]=c[i/d]+1;
}
else
c[i]=0;
}
int x=a,y=0;
for(int i=0;i<=n;i++)
{
if((a-x-y)>0)
sol++;
x-=c[n-i];
y+=c[i+1];
}*/
for(int i=1; i<=n; i++)
{
d[2]+=legendre(n-i+1,2);
d[3]+=legendre(n-i+1,3);
d[5]+=legendre(n-i+1,5);
d[2]-=legendre(i,2);
d[3]-=legendre(i,3);
d[5]-=legendre(i,5);
if (D == 4)
{
if (d[2] >= 2)
sol++;
}
else if (D == 6)
{
if (min(d[2],d[3]) > 0)
sol++;
}
else if (d[D])
sol++;
}
printf("%d",sol);
return 0;
}