Pagini recente » Cod sursa (job #1240388) | Cod sursa (job #2847925) | Cod sursa (job #1927051) | Cod sursa (job #2881395) | Cod sursa (job #2829312)
#include <fstream>
#include <vector>
#include <cmath>
#define nmax 1000005
using namespace std;
ifstream in("pinex.in");
ofstream out("pinex.out");
int c[nmax];
vector<int> vprim;
vector<int> vb;
void ciur()
{
c[0] = c[1] = 1;
for(int i=2; i<nmax; i++)
{
if(c[i] == 0)
{
vprim.push_back(i);
for(int j=i+i; j<nmax; j+=i)
{
c[j] = 1;
}
}
}
}
int n;
long long a, b, sum, prod;
int main()
{
in>>n;
ciur();
for(int i=1; i<=n; i++)
{
in>>a>>b;
vb.clear();
for(int j=0; j<vprim.size(); j++)
{
if(b % vprim[j] == 0)
{
while(b % vprim[j] == 0)
{
b/=vprim[j];
}
vb.push_back(vprim[j]);
}
if(b==1)
break;
}
if(b!=1)
{
vb.push_back(b);
}
sum = 0;
for(int j=1; j<(1<<vb.size()); j++)
{
prod = 1;
int cnt = 0;
for(int h=0; h<vb.size(); h++)
{
if((j&(1<<h))==(1<<h))
{
prod*= ( vb[h]);
cnt++;
}
}
if(cnt%2==0)
sum -= a/prod;
else
sum += a/prod;
// out<<j<<' '<<prod<<' '<<cnt<<' '<<sum<<'\n';
}
out<<a-sum<<"\n";
}
return 0;
}