Pagini recente » Cod sursa (job #52329) | Cod sursa (job #1068409) | Cod sursa (job #3271072) | Cod sursa (job #727192) | Cod sursa (job #3200828)
#include <bits/stdc++.h>
#define MX 1000005
using namespace std;
ifstream fin ("pinex.in");
ofstream fout ("pinex.out");
int n, a, b, r;
int d[55], nrd;
int c[MX], p[100005], nrp;
void ciur()
{
for(int i = 2 ; i <= MX ; i++)
{
if(c[i] == 1)
continue;
nrp++;
p[nrp] = i;
for(int j = i + i ; j <= MX ; j += i)
c[j] = 1;
}
}
void div(int a)
{
nrd = 0;
int ca = a;
for(int i = 1 ; i <= nrp && a > 0 && a > p[i]; i++)
{
if(a % p[i] == 0)
{
nrd++;
d[nrd] = p[i];
}
while(a % p[i] == 0)
a = a / p[i];
}
if(a != 0)
{
nrd++;
d[nrd] = a;
}
}
void bkt(int ind, int prod, int nrprod)
{
if(nrprod % 2 == 0 && nrprod != 0)
r += a / prod;
if(nrprod % 2 != 0 && nrprod != 0)
r -= a / prod;
for(int i = ind ; i <= nrd ; i++)
{
bkt(i + 1, prod * d[i], nrprod + 1);
}
}
int main()
{
fin >> n;
ciur();
while(n > 0)
{
n--;
fin >> a >> b;
div(b);
r = a;
bkt(1, 1, 0);
fout << r << '\n';
}
return 0;
}