Pagini recente » Cod sursa (job #127781) | Cod sursa (job #1737676) | Cod sursa (job #1007755) | Cod sursa (job #611636) | Cod sursa (job #1742355)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("pinex.in");
ofstream g("pinex.out");
const int MAXP=1000000;
int M,lp=0,lg=0;
long long int A,B,p[33],prim[MAXP/2],nrsol;
bool b[MAXP];
int main()
{
b[2]=0;
prim[++lp]=2;
for(int i=4; i<MAXP; i+=2)
b[i]=1;
for(int i=3; i*i<MAXP; i+=2)
if(b[i]==0)
{
prim[++lp]=i;
for(int j=i*i; j<MAXP; j+=i)
{
//cout<<j;
b[j]=1;
}
}
//for(int i=1;i<=lp;i++)
// cout<<prim[i]<<' ';
f>>M;
while(M--)
{
f>>A>>B;
int j=1;
lg=0;
while(B>1)
{
if(B%prim[j]==0)
{
while(B%prim[j]==0) B/=prim[j];
p[++lg]=prim[j];
}
j++;
}
//for(int i=1;i<=lg;i++)
// cout<<p[i]<<' ';
//c/out<<endl;
int nt=1<<lg;
long long int card=0;
for(int i=1; i<nt; i++)
{
int t=A;
int j=0,p2,ndiv=0;
while((p2=1<<j)<=i)
{
if(p2&i)
{
t/=p[j+1];
ndiv++;
}
j++;
}
if(ndiv%2==0)
card-=t;
else
card+=t;
}
nrsol=A-card;
g<<nrsol<<'\n';
}
return 0;
}