Pagini recente » Cod sursa (job #2315678) | Cod sursa (job #1695603) | Cod sursa (job #1221741) | Cod sursa (job #2903271) | Cod sursa (job #1147672)
/*
Keep It Simple!
*/
#ifdef _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#endif
#include<cstdio>
int C[80000], NrDiv, Div[80000];
bool viz[1000001];
int T, A, B;
void Ciur()
{
C[++NrDiv] = 2;
for (int i = 3; i <= 1000001; i+=2)
if (!viz[i])
{
C[++NrDiv] = i;
for (int j = i; j <= 1000001; j+=i)
viz[j] = 1;
}
}
int main()
{
freopen("pinex.in", "r", stdin);
freopen("pinex.out", "w", stdout);
Ciur();
scanf("%d", &T);
while (T--)
{
scanf("%d%d", &A, &B);
int NrDivB = 0;
for (int i = 1; i <= NrDiv && C[i] * C[i] < B; i++)
{
if (B%C[i] == 0)
{
Div[++NrDivB] = C[i];
while (B%C[i] == 0) { B /= C[i]; }
}
}
if (B > 1) Div[++NrDivB] = B;
int sign = 0, Final = 0, Jos = 1;
for (int i = 1; i <= (1 << NrDivB); i++)
{
sign = 1,Jos = 1;
for (int j = 1; j <= NrDivB;j++)
if (i&(1 << (j-1)))
Jos *= Div[j] , sign = -sign;
Final += sign*A / Jos;
}
printf("%d\n", Final);
}
return 0;
}