Pagini recente » Cod sursa (job #2703612) | Cod sursa (job #611542) | Cod sursa (job #3249980) | Cod sursa (job #2664946) | Cod sursa (job #1140246)
#include <fstream>
#define ll long long
using namespace std;
int m,np,nf,p2[31];
ll p[80000],f[31],a,b,lim,d,nr;
bool c[1000001];
void ciur()
{
p[0]=2;
for(int i=3;i<1000000;i+=2)
if(!c[i])
{
p[++np]=i;
if(i<1000)
for(int j=i*i;j<1000000;j+=i<<1)
c[j]=1;
}
}
ifstream fin("pinex.in");
ofstream fout("pinex.out");
int main()
{
int i,j,k;
ciur();
p2[0]=1;
for(i=1;i<31;++i)
p2[i]=p2[i-1]<<1;
fin>>m;
while(m--)
{
fin>>a>>b;
nf=-1;
for(i=0;i<=np && p[i]*p[i]<=b;++i)
if(!(b%p[i]))
{
f[++nf]=p[i];
while(!(b%p[i]))
b/=p[i];
}
if(b>1)
f[++nf]=b;
nr=a;
lim=p2[++nf];
for(i=1;i<lim;++i)
{
k=0;
d=1;
for(j=0;j<nf;++j)
if(i&p2[j])
{
d*=f[j];
++k;
}
if(k&1)
nr-=a/d;
else
nr+=a/d;
}
fout<<nr<<"\n";
}
return 0;
}