Pagini recente » Cod sursa (job #2945158) | Cod sursa (job #1716648) | Cod sursa (job #549530) | Cod sursa (job #2745545) | Cod sursa (job #48278)
Cod sursa(job #48278)
#include <stdio.h>
#define fin "pascal.in"
#define fout "pascal.out"
#define MAXF 2 // ~ lglgD
struct factor {int nr,pow;} fact[MAXF];
int N,D;
int getpow(int & n,int d)
{
int sol=0;
while(n%d==0)
++sol , n/=d;
return sol;
}
void factorize()
{
int i=0,k=2;
while(D>1)
{
if(D%k==0)
{
fact[i].nr = k;
fact[i++].pow = getpow(D,k);
}
++k;
}
}
int getsol()
{
int factC[MAXF],sol=0,j;
factC[0] = factC[1] = 0;
for(int i = 1;i<=N/2;++i)
{
int n1=N-i+1,n2=i,nfact=0;
for(j=0;fact[j].nr;++j)
{
factC[j] = factC[j] + getpow(n1,fact[j].nr) - getpow(n2,fact[j].nr);
if(fact[j].pow<=factC[j]) ++nfact;
}
if(nfact!=j) continue;
if(i==(N/2 + N%2)) ++sol;
else sol+=2;
}
return sol;
}
int main()
{
freopen(fin,"r",stdin);
freopen(fout,"w",stdout);
scanf("%d %d", &N, &D);
factorize();
printf("%d",getsol());
return 0;
}