Pagini recente » Cod sursa (job #2871025) | Cod sursa (job #3151281) | Cod sursa (job #2265479) | Cod sursa (job #490417) | Cod sursa (job #2176086)
#include <iostream>
#include <cstdio>
#include <bitset>
using namespace std;
bool sir[1000000];
int diviz[80000], prim[80000], k = 0, n, a, b, nrp = 0;
void ciur()
{
for(int i = 4; i<=1000000; i+=2)
sir[i] = 1;
for(int i = 3; i<=1000000; i+=2)
{
if(sir[i] == 0)
{
prim[nrp++] = i;
for(int j = i*3; j<=1000000; j+=i)
{
sir[j] = 1;
}
}
}
}
void divizori()
{
for(int di = 0; prim[di]*prim[di]<b; di++)
{
if(b%prim[di])
{
diviz[k++] = prim[di];
}
}
if(b!=1)
diviz[k++] = b;
}
void rez()
{
scanf("%d %d", &a, &b);
divizori();
int v = (1<<k);
int suma = 0;
for(int nr = 0; nr<v; nr++)
{
int prod = 1, nrsub = 0;
for(int j = 0; j<k; j++)
{
if(nr&(1<<j))
{
prod*=diviz[j];
nrsub++;
}
}
if(nrsub&1 == 1 && nrsub!=0)
suma+=a/prod;
else if(nrsub!=0)
suma-=a/prod;
}
printf("%d\n", a-suma);
}
int main()
{
freopen("pinex.in", "r", stdin);
freopen("pinex.out", "w", stdout);
scanf("%d", &n);
ciur();
for(int i = 0; i<n; i++)
rez();
return 0;
}