Pagini recente » Cod sursa (job #837254) | Cod sursa (job #1638157) | Cod sursa (job #2278026) | Cod sursa (job #979223) | Cod sursa (job #1076387)
/*
Keep It Simple!
*/
#include<stdio.h>
#define MaxD 1000005
long long p[80000],nr,n,NrD,D[80000];
bool viz[MaxD];
void Init()
{
p[++nr] = 2;
for(int i=3; i<=MaxD; i+=2)
{
if(!viz[i])
{
p[++nr]=i;
for(int j=i; j<=MaxD; j+=i)
viz[j] = 1;
}
}
}
void InitNrD(int x)
{
NrD = 0;
for(int i=1; i<=nr && x!=1; i++)
{
if( x%p[i] == 0 )
{
D[++NrD]=p[i];
while(x%p[i] == 0)
{
x/=p[i];
}
}
}
}
void Solve(int a,int b)
{
long long s = 0;
InitNrD(b);
for( int i = 1; i < (1<<NrD); i++ )
{
long long sign = 0 , prod = 1;
for( int j=0; j< NrD; j++)
if( i & (1<<(j)) )
{
prod *= 1LL * D[j+1];
sign++;
}
if( sign%2 == 0)
sign = -1;
else
sign = 1;
s += 1LL * sign * a/prod;
}
printf("%lld\n",a-s);
}
int main()
{
freopen("pinex.in","r",stdin);
freopen("pinex.out","w",stdout);
Init();
scanf("%d",&n);
int x,y;
for(int i=1;i<=n;i++)
{
scanf("%d%d",&x,&y);
Solve(x,y);
}
}