Pagini recente » Cod sursa (job #162145) | Cod sursa (job #219049) | Cod sursa (job #2013505) | Cod sursa (job #1781570) | Cod sursa (job #1971043)
#include <bits/stdc++.h>
#define BIT(x) (1<<(x))
using namespace std;
ifstream f("pinex.in");
ofstream g("pinex.out");
long long T,A,B;
bitset<10000002> isPrime;
vector<int> Primes,Divisors;
void getPrimes()
{
Primes.push_back(2);
for(int i=3;i<=1000;i+=2)
if (!isPrime[i])
for (int j=i*i; j<=1000000; j+=i)
isPrime[j] = 1;
for(int i=3;i<=1000000;i+=2)
if (!isPrime[i])
Primes.push_back(i);
}
void getFactors()
{
for(auto it:Primes)
{
if(it*it>B) break;
if(B==1) break;
if (B%it == 0)
{
Divisors.push_back(it);
while (B%it == 0)
{
B/=it;
}
}
}
if (B!=1)
Divisors.push_back(B);
}
void getNumber()
{
int Size=Divisors.size();
int nrBytes;
long long number=0,tmp=1;
for(int i = 1; i < BIT(Size); i++)
{
tmp = 1;
nrBytes=0;
for(int j=0;j<Size;j++)
{
if(i & BIT(j))
{
nrBytes++;
tmp*= Divisors[j];
}
}
if(nrBytes&1) number+=A/tmp;
else number-=A/tmp;
}
g<<A-number<<'\n';
}
void solve()
{
f>>T;
while(T--)
{
Divisors.clear();
f>>A>>B;
getFactors();
getNumber();
}
}
int main()
{
getPrimes();
solve();
}