Pagini recente » Borderou de evaluare (job #143669) | Cod sursa (job #3122707) | Cod sursa (job #2372358) | Cod sursa (job #3276534) | Cod sursa (job #3153317)
#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#define int long long
using namespace std;
#define cin in
#define cout out
ifstream in ("pinex.in");
ofstream out ("pinex.out");
int a,b;
vector <int> divv;
int bld()
{
int sz=divv.size();
int k=(1LL<<sz);
int sum=0;
for (int i=1; i<k; i++)
{
int cnt=0; int part=1;
for (int pos=0; pos<sz; pos++)
{
if (i & (1LL<<pos))
{
cnt++; part*=divv[pos];
}
}
if (part>a) continue;
if (cnt%2==1) sum+=a/part;
else sum-=a/part;
}
return a-sum;
}
void solv()
{
divv.clear();
int d=2;
while (b>1)
{
int cnt=0;
while (b%d==0 && b>1)
{
b/=d; cnt++;
}
if (cnt) {divv.push_back(d);}
d++;
if (b>1 && d*d>b) d=b;
}
cout<<bld()<<"\n";
}
signed main()
{
int t; cin>>t;
while (t--)
{
cin>>a>>b;
solv();
}
}