Pagini recente » Profil b_rabit | Monitorul de evaluare | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #3364019)
#include <bits/stdc++.h>
#include <fstream>
using namespace std;
ifstream fin ("pinex.in");
ofstream fout ("pinex.out");
vector<long long> ciur;
void ciurul(long long b)
{
ciur.clear();
for(long long i=2;i*i<=b;++i)
{
if(b%i==0)
{
ciur.push_back(i);
while(b%i==0)
{
b/=i;
}
}
}
if(b>1)
{
ciur.push_back(b);
}
}
long long query(long long a,long long b)
{
ciurul(b);
int n=ciur.size();
long long neprime=0;
int total_subsets=(1<<n);
for(int mask=1;mask<total_subsets;++mask)
{
long long pr=1;
int bits_count=0;
for(int i=0;i<n;++i)
{
if((mask>>i)&1)
{
pr*=ciur[i];
bits_count++;
}
}
if(bits_count%2==1)
{
neprime+=a/pr;
}
else
{
neprime-=a/pr;
}
}
return a-neprime;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int m;
if(fin>>m)
{
while(m--)
{
long long a,b;
fin>>a>>b;
fout<<query(a,b)<<'\n';
}
}
return 0;
}