Pagini recente » Cod sursa (job #1531004) | Cod sursa (job #10131)
Cod sursa(job #10131)
#include <stdio.h>
#include <string.h>
#include <math.h>
long x[100002],p[10024],dim;
long f(long N,long p1)
{
long q=N;
q/=p1;
if(q)
return q+f(N,p1*p1);
else
return 0;
}
int ver(long R,long C)
{
register long a=R,b=R-C,c=C,i,tmp;
for(i=1;i<=dim;++i)
{
tmp=f(a,p[i]);
tmp-=f(b,p[i]);
tmp-=f(c,p[i]);
if(tmp<x[i])
return 0;
}
return 1;
}
int main()
{
freopen("pascal.in","r",stdin);
freopen("pascal.out","w",stdout);
register long i,j,n,m,X=0,n1,m1;
scanf("%ld%ld",&n,&m);
m1=m;
for(i=2;i<=m1;++i)
if(m1%i==0)
{
++dim;
p[dim]=i;
while(m1%i==0)
{
++x[dim];
m1/=i;
}
}
if(m1!=1)
{
p[++dim]=m1;
++x[dim];
}
n1=n>>1;
for(i=1;i<=n1;++i)
X+=ver(n-1,i-1)<<1;
if(n&1)
X+=ver(n-1,n1);
printf("%ld\n",X);
return 0;
}