Pagini recente » Cod sursa (job #750161) | Cod sursa (job #2465211) | Cod sursa (job #2393406) | Cod sursa (job #1858551) | Cod sursa (job #2175639)
#include <bits/stdc++.h>
using namespace std;
ifstream f("pinex.in");
ofstream g("pinex.out");
bool ok[1000001];
int prim[1000001],fact[1000001];
int n,a,b;
void ciur()
{
memset(ok,1,sizeof(ok));
for(int i=2;i<1000000;++i)
if(ok[i])
{
prim[++prim[0]]=i;
int j=2;
while(i*j<=1000000)
{
ok[i*j]=0;
j++;
}
}
}
void solve()
{
long long t=0,d=0;
while(b>1)
{
d++;
if(b%prim[d]==0)
{
fact[++t]=prim[d];
while(b%prim[d]==0)
{
b/=prim[d];
}
}
if(prim[d]>sqrt(b) && b>1)
{
fact[++t]=b;
b=1;
}
}
long long ans=a;
for(int i=1;i<(1<<t);++i)
{
long long nr=0;
long long prod =1 ;
for(int j=0;j<t;++j)
if((1<<j)&i)
{
prod = 1LL*prod*fact[j+1];
nr++;
}
if(nr%2)
nr=-1;
else
nr=1;
ans = ans +1LL*nr*a/prod;
}
g<<ans;
}
int main()
{
ciur();
f>>n;
for(int i=1;i<=n;++i)
{
f>>a>>b;
solve();
g<<'\n';
}
return 0;
}