Pagini recente » Cod sursa (job #1850125) | Cod sursa (job #949721) | Cod sursa (job #556108) | Cod sursa (job #1841995) | Cod sursa (job #2985026)
#include <fstream>
#include <vector>
#define ll long long
using namespace std;
ifstream f("pinex.in");
ofstream g("pinex.out");
long long m,x,y;
const int N=1e6+5;
int a[N+100];
vector<ll>b;
void ciur()
{
for(int i=2;i*i<=N;i++)
if(a[i]==0)
for(int j=i*i;j<=N;j+=i)
a[j]=1;
for(int i=2;i<=N;i++)
if(a[i]==0)
b.push_back(i);
}
int main()
{
f>>m;
ciur();
while(m--)
{
f>>x>>y;
vector<ll>fct;
for(auto t : b)
{
if(y==1)
break;
if(t*t>y)
break;
if(y%t==0)
fct.push_back(t);
while(y%t==0)
y/=t;
}
if(y!=1)
fct.push_back(y);
long long ans=x;
int all=(1<<(fct.size()));
for(int i=1;i<all;i++)
{
int bts=0;
long long sum=1;
for(int j=0;j<fct.size();j++)
if((1<<j)& i)
{
bts++;
sum*=fct[j];
}
// g<<x<<" "<<sum<<'\n';
if(bts%2)
ans-=(x/sum);
else
ans+=(x/sum);
}
g<<ans<<'\n';
}
return 0;
}