Pagini recente » Cod sursa (job #1440060) | Cod sursa (job #1217878) | Cod sursa (job #3291309) | Cod sursa (job #2210212) | Cod sursa (job #977733)
Cod sursa(job #977733)
#include<stdio.h>
#include<math.h>
long long div[20],a,b,c[20],s,h=1;
int nrd;
void desc()
{
int i,m;
nrd=0;
if(b%2==0)
{
while(b%2==0)
b/=2;
div[++nrd]=2;
}
m=sqrt(b);
for(i=3;i<=m;i+=2)
{
if(b%i==0)
{
while(b%i==0)
b/=i;
div[++nrd]=i;
if(b==1)
break;
}
}
if(b>1)
div[++nrd]=b;
}
void back(int x,int p)
{
int i;
if(p>1)
{
if(p%2==0)
s+=a/h;
else
s-=a/h;
}
for(i=x+1;i<=nrd;++i)
{
c[p]=div[i];
h*=div[i];
back(i,p+1);
h/=div[i];
}
}
int main()
{
freopen("pinex.in","r",stdin);
freopen("pinex.out","w",stdout);
int t;
scanf("%d",&t);
while(t--)
{
scanf("%lld%lld",&a,&b);
desc();
s=0;
back(0,1);
printf("%d\n",a-s);
}
return 0;
}