Pagini recente » Cod sursa (job #1218279) | Cod sursa (job #1479253) | Cod sursa (job #2771230) | Cod sursa (job #2058959) | Cod sursa (job #1567628)
#include <cstdio>
#include <vector>
using namespace std;
int n;
int a, b;
int dimensiune;
int numar;
bool ciur[1000000];
vector<int> prime;
vector<int> descompunere;
void createCiur()
{
for(int i = 2; i < 1000000; i++)
{
if(ciur[i] == false)
{
prime.push_back(i);
for(int j = i * 2; j < 1000000; j += i)
{
ciur[j] = true;
}
}
}
}
void descompune()
{
descompunere.clear();
for(int i = 0; i < b; i++)
{
if(b % prime[i] == 0)
{
descompunere.push_back(prime[i]);
}
if(prime[i] > b)
{
break;
}
}
dimensiune = descompunere.size();
}
int main()
{
freopen("pinex.in", "r", stdin);
freopen("pinex.out", "w", stdout);
createCiur();
scanf("%d", &n);
for(int i = 0; i < n; i++)
{
scanf("%d %d", &a, &b);
descompune();
numar = 0;
for(int x = 1; x < (1 << dimensiune); x++)
{
int produs = 1;
int nr = 0;
for(int j = 0; j < dimensiune; j++)
{
if((x & (1 << j)) != 0)
{
nr++;
produs *= descompunere[j];
}
}
if(nr % 2 != 0)
{
numar += (a / produs);
}
else
{
numar -= (a / produs);
}
}
printf("%d\n", a - numar);
}
return 0;
}