Pagini recente » Cod sursa (job #1168134) | Cod sursa (job #2173060) | Cod sursa (job #1457431) | Cod sursa (job #835840) | Cod sursa (job #2878712)
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ipair pair<int, int>
ifstream fin("pinex.in");
ofstream fout("pinex.out");
ll a, b, ans;
bool use[100];
vector<ll> primes;
vector<ll> primeFactors(ll x)
{
vector<ll> ans;
int p=0;
while(x%2==0)
{
p++;
x/=2;
}
if(p)
ans.push_back(2);
ll d=3;
while(x>1)
{
p=0;
while(x%d==0)
{
p++;
x/=d;
}
if(p)
ans.push_back(d);
d+=2;
if(d*d>x)
d=x;
}
return ans;
}
void solution()
{
int cnt=0;
ll p=1;
for(int i=0; i<primes.size(); i++)
if(use[i])
{
cnt++;
p*=primes[i];
}
if(cnt==0)
return;
if(cnt%2==1)
ans+=a/p;
else
ans-=a/p;
}
void backtracking(int step)
{
for(int i=0; i<=1; i++)
{
use[step]=i;
if(step==primes.size()-1)
solution();
else
backtracking(step+1);
}
}
void solve()
{
fin >> a >> b;
primes=primeFactors(b);
ans=0;
backtracking(0);
fout << a-ans << "\n";
}
int main()
{
int t;
fin >> t;
for(int i=0; i<t; i++)
solve();
return 0;
}