Pagini recente » Cod sursa (job #2287023) | Cod sursa (job #2347073) | Cod sursa (job #190273) | Cod sursa (job #1391706) | Cod sursa (job #1018035)
#include<stdio.h>
int n,np,p[1000013],nd,nr;
long long a,b,x,y,z,d[100],q,i,j;
bool k[1000013];
int main()
{
freopen("pinex.in","r",stdin);
freopen("pinex.out","w",stdout);
scanf("%d",&n);
for(i=2;i<1000013;++i)k[i]=1;
i=2;
while(i*i<1000013)
{
if(k[i])
{
j=i;
while(i*j<1000013)
{
k[i*j]=0;
++j;
}
p[np++]=i;
}
++i;
}
for(int w=0;w<n;++w)
{
scanf("%lld%lld",&a,&b);
i=0;
nd=0;
/*while(b!=1)
{
if(b%p[i]==0)
{
while(b%p[i]==0)b/=p[i];
d[nd++]=p[i];
}
++i;
}*/
for(i=0;i<np && b!=1;++i)
if(b%p[i]==0)
{
while(b%p[i]==0)b/=p[i];
d[nd++]=p[i];
}
if(b!=1)d[nd++]=b;
q=(long long)1<<nd;
z=0;
for(i=1;i<q;++i)
{
x=1;
nr=0;
for(j=0;j<nd;++j)
if(i & ((long long)1<<j)) x*=d[j],++nr;
if(nr%2==0)x=-x;
z+=(a/x);
}
printf("%lld\n",a-z);
}
return 0;
}