Pagini recente » Cod sursa (job #3230536) | Cod sursa (job #1244674) | Cod sursa (job #3202712) | Cod sursa (job #623734) | Cod sursa (job #2158307)
#include <iostream>
#include <cstdio>
#include <bitset>
using namespace std;
bool sir[1000000];
int diviz[80000], k = 0, n, a, b;
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)
{
for(int j = i*3; j<=1000000; j+=i)
{
sir[j] = 1;
}
}
}
}
void rez()
{
scanf("%d %d", &a, &b);
k = 0;
if(b&1 == 0)
diviz[k++] = 2;
int d = 3;
for(; d*d<=b; d+=2)
if(sir[d] == 0)
diviz[k++] = d;
if(sir[b] == 0)
diviz[k++] = b;
int v = (1<<k);
int prod = 1, nrsub = 0, suma = 0;
for(int nr = 0; nr<v; nr++)
{
for(int j = 0; j<k; j++, nrsub = 0)
{
if(nr&(1<<j))
{
prod*=diviz[j];
nrsub++;
}
if(nrsub&1 == 1 && nrsub!=0)
suma+=a/prod;
else if(nrsub!=0)
suma-=a/prod;
}
prod = 1;
}
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;
}