Pagini recente » Cod sursa (job #1391777) | Cod sursa (job #600851) | Cod sursa (job #2576241) | Cod sursa (job #2337622) | Cod sursa (job #2811651)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("pinex.in");
ofstream fout("pinex.out");
#define nmax 1000000
bool ciur[nmax];
int m,a,b,cnt,prim[100005];
int main()
{
for(int i=2;i<=nmax;++i)
{
if(ciur[i]==0)
{
prim[++cnt]=i;
for(int j=i+i;j<=nmax;j+=i)
ciur[j]=1;
}
}
fin>>m;
while(m--)
{
fin>>a>>b;
int i=1,nrd=0,v[105];
while(b>1 && prim[i]*prim[i]<=b)
{
if(b%prim[i]==0)
{
v[++nrd]=prim[i];
while(b%prim[i]==0)
b/=prim[i];
}
++i;
}
if(b>1)v[++nrd]=b;
long long rez=a;
for(i=1;i<(1LL<<nrd);++i)
{
long long p=1,nel=0;
for(int j=0;j<nrd;++j)
{
if(i&(1LL<<j))
{
++nel;
p*=v[j+1];
}
}
if(nel%2)
rez-=a/p;
else
rez+=a/p;
}
fout<<rez<<'\n';
}
return 0;
}