Pagini recente » Cod sursa (job #2880975) | Cod sursa (job #2493256) | Cod sursa (job #2455675) | Cod sursa (job #3250455) | Cod sursa (job #1949307)
#include<stdio.h>
#include<iostream>
#include<math.h>
#include<vector>
#define ull unsigned long long
using namespace std;
#define N 100001
ull n, m, t;
ull a[N];
void initializare()
{
ull sqr = sqrt(N);
a[0] =a[1]= 1;
for (ull i = 2; i <= sqr; i++)
{
if (a[i] == 0)
{
for (ull j = i*i; j < N; j += i)
{
if(a[j]==0)
a[j] = i;
}
}
if (a[i] == 0)
{
//printf("%d\n", i);
}
}
}
ull pise(vector<ull> &b, ull x, ull numbers_taken, ull number,ull product,ull poz)
{
ull sum = 0;
if (numbers_taken == number)
{
return x / product;
}
else
{
for (ull i = poz; i < b.size(); i++)
{
sum += pise(b, x, numbers_taken + 1, number, product*b[i], i + 1);
}
}
return sum;
}
ull solve(ull x, ull y)
{
vector<ull> b(0);
while (a[y] != 0||y==1)
{
b.push_back(a[y]);
ull x = a[y];
while (y%x == 0)
{
y /= x;
}
}
if(y!=1)
b.push_back(y);
ull sum = 0;
for (ull i = 1; i <= b.size(); i++)
{
if(i%2==1)
sum += pise(b, x, 0, i, 1, 0);
else
sum -= pise(b, x, 0, i, 1, 0);
}
return x-sum;
}
int main()
{
freopen("pinex.in", "r", stdin);
freopen("pinex.out", "w", stdout);
scanf("%d", &t);
initializare();
for (ull i = 1; i <=t; i++)
{
ull x, y;
scanf("%llu %llu", &x, &y);
printf("%llu\n", solve(x, y));
}
}