Pagini recente » Cod sursa (job #405616) | Cod sursa (job #8864) | Cod sursa (job #26329) | Cod sursa (job #2237819) | Cod sursa (job #1680299)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("pinex.in");
ofstream g("pinex.out");
const int prim = 1000000;
long long n, a, b, nrprim;
int p[prim];
int nr, d;
long long sol;
int fact[prim];
bool seen[prim+5];
void Precalc()
{
seen[0] = seen[1] = 1;
for(int i = 2; i <= prim; i++)
{
if(seen[i] == 0)
{
for(int j = i; j <= prim; j=j+i) seen[j] = 1;
p[++nrprim] = i;
}
}
}
void Solve()
{
nr = 0;
d = 0;
while(b>1)
{
//cout<<b<<' ';
d++;
if(b%p[d] == 0)
{
fact[nr++] = p[d];
while(b%p[d] == 0)
{
b /= p[d];
}
}
}
sol = 0;
for(int i = 1; i < (1<<nr); i++)
{
long long m = 0, prod = 1;
for(int j = 0; j < nr; j++)
{
if((1<<j) & i)
{
prod = prod*1LL*fact[j];
m++;
}
}
if(m%2 == 1) m = 1;
else m = -1;
sol = sol + 1LL*m*a/prod;
}
g<<a-sol<<'\n';
}
int main()
{
f>>n;
Precalc();
//for(int i = 0; i<nr; i++) cout<<p[i]<<' ';
while(n--)
{
f>>a>>b;
//cout<<a<<b;
Solve();
}
return 0;
}