Pagini recente » Cod sursa (job #1658370) | Cod sursa (job #546386) | Cod sursa (job #1971082) | Cod sursa (job #408413) | Cod sursa (job #326499)
Cod sursa(job #326499)
#include<cstdio>
const int oo=1<<30;
int r,d,a[2],nr,n[2],k[2],n_k[2];
void desc()
{
if(d==2 || d==4)
{
a[0]=2;
nr=1;
return;
}
if(d==3)
{
a[0]=3;
nr=1;
return;
}
if(d==5)
{
a[0]=5;
nr=1;
return;
}
a[0]=2;
a[1]=3;
nr=2;
}
int putere(int n,int k)//calc puterea la care apare k in desc lui n!
{
int s=0,p=k;
while(p<=n)
{
s+=n/p;
p*=k;
}
return s;
}
int putere2(int n,int k)//calc puterea la care apare k in desc lui n
{
int p=0;
if(n==0)
return 0;
while(n%k==0)
{
++p;
n/=k;
}
return p;
}
int calcul()
{
int i,j1,j2,p1,p2,min,rez=0;
for(i=0;i<nr;++i)//calc puterile la care apar in desc lui n! div primi ai lui d
{
n_k[i]=n[i]=putere(r,a[i]);
k[i]=0;
}
for(j1=1,j2=r-1;j1<=j2;++j1,--j2)
{
min=oo;
for(i=0;i<nr;++i)
{
p1=putere2(j1-1,a[i]);
p2=putere2(j2+1,a[i]);
k[i]+=p1;
n_k[i]-=p2;
if(n[i]-k[i]-n_k[i]<min)
min=n[i]-k[i]-n_k[i];
}
if(d==4 && min>=2)
{
++rez;
if(j1!=j2)
++rez;
}
if(d!=4 && min)
{
++rez;
if(j1!=j2)
++rez;
}
}
return rez;
}
int main()
{
freopen("pascal.in","r",stdin);
freopen("pascal.out","w",stdout);
scanf("%d%d",&r,&d);
desc();
printf("%d\n",calcul());
return 0;
}