Pagini recente » Cod sursa (job #3145370) | Cod sursa (job #2201022) | Cod sursa (job #2441944) | Cod sursa (job #2845570) | Cod sursa (job #189911)
Cod sursa(job #189911)
#include <stdio.h>
#define DIV_MAX 4000000
#define IN "pascal.in"
#define OUT "pascal.out"
//i!/((i-j)!*j!)
int vd[10],v[DIV_MAX];
int x,y,d,r,nr;
void scan()
{
freopen(IN, "r",stdin);
freopen(OUT, "w",stdout);
scanf("%d%d", &r,&d);
for(int i=2;i<=6;++i)
while(!(d%i))
{
++vd[i];
d/=i;
}
}
void add(int xx)
{
for(int j=2;j*j<=xx;++j)
{
int p=0;
if(!(xx%j))
{
while(!(xx%j))
{
xx/=j;
++p;
}
v[j]+=p;
}
if(xx==1)
break;
}
if(xx>1)
++v[xx];
}
void sub(int yy)
{
for(int j=2;j*j<=yy;++j)
{
int p=0;
if(!(yy%j))
{
while(!(yy%j))
{
yy/=j;
++p;
}
v[j]-=p;
}
if(yy==1)
break;
}
if(yy>1)
--v[yy];
}
void check()
{
for(int i=2;i<=6;++i)
if(v[i]<vd[i])
return;
++nr;
}
void solve()
{
x=r; y=1;
for(int i=1;i<=(r-1)/2;++i)
{
add(x--);
sub(y++);
check();
}
nr*=2;
if(!(r%2))
{
add(x--);
sub(y++);
check();
}
printf("%d\n", nr);
}
int main()
{
scan();
solve();
return 0;
}