Pagini recente » Cod sursa (job #1467191) | Cod sursa (job #1731669) | Cod sursa (job #2016723) | Cod sursa (job #2035607) | Cod sursa (job #2501466)
#include <bits/stdc++.h>
using namespace std;
const int B = 1e6;
bool c[5 + B];
vector <int> v;
vector <int> mu;
void ciur()
{
for(int i = 2; i * i <= B; i++)
{
if(c[i] == false)
for(int j = i * i; j <= B; j+= i)
{
c[j] = true;
}
}
for(int i = 2; i <= B; i++) if(c[i] == false) v.push_back(i);
}
int main()
{
freopen("pinex.in", "r", stdin);
freopen("pinex.out", "w", stdout);
ciur();
int m, a, b;
scanf("%d", &m);
while(m--)
{
scanf("%d%d", &a, &b);
for(int i = 0; v[i]<= b && i < v.size(); i++)
if(b % v[i] == 0)
mu.push_back(v[i]);
int rez(0);
for(int i = 1; i < (1 << mu.size()); i++){
int nr(0), p(1);
for(int j = 0; j < mu.size(); j++){
if(i & (1 << j)){
nr++;
p *= mu[j];
}
}
if(nr % 2 == 0) rez -= (a / p);
else rez += (a / p);
}
printf("%d\n", a - rez);
mu.clear();
}
return 0;
}