Pagini recente » Cod sursa (job #1314523) | Cod sursa (job #2089378) | Cod sursa (job #1069806) | Cod sursa (job #1600409) | Cod sursa (job #3148578)
#include <fstream>
#include <vector>
using namespace std;
ifstream in ("pinex.in");
ofstream out ("pinex.out");
const long long max_size = 1e6 + 1;
bool ciur[max_size];
vector <long long> pr;
void ciuru ()
{
ciur[0] = 1;
ciur[1] = 1;
for (long long i = 2; i < max_size; i++)
{
if (ciur[i] == 1)
{
continue;
}
pr.push_back(i);
for (long long j = 2 * i; j < max_size; j += i)
{
ciur[j] = 1;
}
}
}
void solve ()
{
vector <long long> divz;
long long x, y;
in >> x >> y;
for (auto f : pr)
{
if (f > y)
{
break;
}
if (y % f == 0)
{
divz.push_back(f);
while (y % f == 0)
{
y /= f;
}
}
}
if (y != 1)
{
divz.push_back(y);
}
long long ans = 0;
for (long long i = 1; i < (1LL << divz.size()); i++)
{
long long val = -1;
for (long long j = 0; j < divz.size(); j++)
{
if ((i & (1LL << j)) != 0)
{
// out << divz[j] << " ";
val *= (-divz[j]);
}
}
//out << val << '\n';
ans += x / val;
}
out << x - ans << '\n';
}
signed main ()
{
ciuru();
long long t;
in >> t;
while (t--)
{
solve();
}
in.close();
out.close();
return 0;
}