Pagini recente » Cod sursa (job #2561559) | Cod sursa (job #258462) | Cod sursa (job #2544272) | Cod sursa (job #10196)
Cod sursa(job #10196)
#include <stdio.h>
#include <string.h>
long x[128],p[128],x2[128],p2[128],x3[128],p3[128];
void trans1(long m1)
{
memset(&p,0,sizeof(p));
memset(&x,0,sizeof(x));
long i;
for(i=2;i<=m1;++i)
if(m1%i==0)
{
p[++x[0]]=i;
while(m1%i==0)
{
++x[x[0]];
m1/=i;
}
}
if(m1!=1)
{
p[++x[0]]=m1;
++x[x[0]];
}
}
void trans2(long m1)
{
memset(&p2,0,sizeof(p2));
memset(&x2,0,sizeof(x2));
long i;
for(i=2;i<=m1;++i)
if(m1%i==0)
{
p2[++x2[0]]=i;
while(m1%i==0)
{
++x2[x2[0]];
m1/=i;
}
}
if(m1!=1)
{
p2[++x2[0]]=m1;
++x2[x2[0]];
}
}
void trans3(long m1)
{
memset(&p3,0,sizeof(p3));
memset(&x3,0,sizeof(x3));
long i;
for(i=2;i<=m1;++i)
if(m1%i==0)
{
p3[++x3[0]]=i;
while(m1%i==0)
{
++x3[x3[0]];
m1/=i;
}
}
if(m1!=1)
{
p3[++x3[0]]=m1;
++x3[x3[0]];
}
}
int ver()
{
for(int i=1;i<=x[0];++i)
if(p[i]^p2[i])
return 0;
else
if(x[i]-x2[i]<x3[i])
return 0;
return 2;
}
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=n+1;
n1=n>>1;
trans3(n);
for(i=1;i<=n1;++i)
{
--m1;
trans1(m1);
trans2(i);
X+=ver();
}
if(n&1)
{
--m1;
trans1(m1);
trans2(i);
if(ver())
++X;
}
printf("%ld\n",X);
return 0;
}