Pagini recente » Cod sursa (job #1595169) | Cod sursa (job #2886326) | Cod sursa (job #2553601) | Cod sursa (job #2816185) | Cod sursa (job #2704715)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("pinex.in");
ofstream fout("pinex.out");
#define nmax 1000010
long long i,j,n,k,a,b,nr,rez,nrc,v[1000001],prim[1000001];
bool p[1000001];
int main()
{
for(i=4; i<=nmax; i+=2)p[i]=1;
prim[++nr]=2;
for(i=3; i<=nmax; i+=2)
{
if(p[i]==0)
{
prim[++nr]=i;
for(j=3*i; j<=nmax; j+=i)
{
p[j]=1;
}
}
}
fin>>n;
for(i=1; i<=n; i++)
{
fin>>a>>b;
long long m=0;
j=1;
while(prim[j]*prim[j]<=b&&b>1)
{
if(b%prim[j]==0)
{
v[++m]=prim[j];
while(b%prim[j]==0) b=b/prim[j];
}
j++;
}
if(b>1)
{
v[++m]=b;
}
long long nn=1<<m;
rez=a;
for(j=1; j<nn; j++)
{
nrc=0;
long long pp=1;
for(k=0; k<m; k++)
{
if(j&(1LL<<k))
{
nrc++;
pp=pp*v[k+1];
}
}
if(nrc%2==1)rez=rez-a/pp;
else rez+=a/pp;
}
fout<<rez<<'\n';
}
return 0;
}