Pagini recente » Cod sursa (job #466239) | Cod sursa (job #44827) | Cod sursa (job #1103113) | Cod sursa (job #524559) | Cod sursa (job #1082818)
#include<stdio.h>
#include<cmath>
using namespace std;
int z,qw[78500];
long long n,q,i,j,c,b,t,x,d,p,s,o,w,a[101];
bool p1[1000001];
int main ()
{
freopen("pinex.in","r",stdin);
freopen("pinex.out","w",stdout);
scanf("%lld\n",&n);
p1[1]=1;
p1[2]=0;
q=1;
qw[1]=2;
for(i=3;i<=1000000;i+=2)
{
if(p1[i]==0)
{
q++;
qw[q]=i;
if(z==0)
{
for(j=i*i;j<=1000000;j+=i)
{
p1[j]=1;
}
if((i+2)*(i+2)>1000000)z=1;
}
}
}
for(i=1;i<=n;i++)
{
scanf("%lld %lld",&c,&b);
t=0;
x=b;
d=1;
while(x>1)
{
p=0;
if(x%qw[d]==0)
{
t++;
a[t]=qw[d];
while(x%qw[d]==0)x=x/qw[d];
}
if(d>sqrt(x)&&x>1)
{
t++;
a[t]=x;
x=1;
}
d++;
}
s=c;
for(j=1;j<(1<<t);j++)
{
p=1;
w=0;
for(o=0;o<t;o++)
if((1<<o)&j)
{
w++;
p=p*a[o+1];
}
if(w%2==1)w=-1;
else w=1;
if(p>0)s=s+w*c/p;
}
printf("%lld\n",s);
}
return 0;
}