Pagini recente » Cod sursa (job #1831878) | Cod sursa (job #694605) | Cod sursa (job #1599642) | Cod sursa (job #2004901) | Cod sursa (job #1082812)
#include<stdio.h>
#include<cmath>
using namespace std;
int z,qw[78500];
long long n,i,c,b,k,x,d,pr,t,s,w,j,p,q,r,o,h,a[100000];
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<=1000001;i+=2)
{
if(p1[i]==0)
{
q++;
qw[q]=i;
if(z==0)
{
for(j=i*i;j<=1000001;j+=i)
{
p1[j]=1;
}
if((i+2)*(i+2)>1000001)z=1;
}
}
}
for(i=1;i<=n;i++)
{
scanf("%lld %lld",&c,&b);
k=0;
s=0;
x=b;
d=1;
while(x>1)
{
p=0;
if(x%qw[d]==0)
{
k++;
a[k]=qw[d];
while(x%qw[d]==0)x=x/qw[d];
}
if(d>sqrt(x)&&x>1)
{
k++;
a[k]=x;
x=1;
}
d++;
}
t=k;
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=1LL*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;
}