Pagini recente » Cod sursa (job #1887371) | Cod sursa (job #2555336) | Cod sursa (job #2242076) | Cod sursa (job #1166828) | Cod sursa (job #3322350)
#include <bits/stdc++.h>
#define NMAX 1000001
using namespace std;
ifstream fin("pinex.in");
ofstream fout("pinex.out");
long long a,t,b,i,n,j,nrp,v[101],prime[NMAX];
bool ciur[NMAX];
int main()
{
prime[0]=prime[1]=1;
for(i=2;i<=NMAX;i++)
{
if(ciur[i]==0)
{
prime[nrp++]=i;
for(j=2*i;j<=NMAX;j+=i)
ciur[j]=1;
}
}
fin>>t;
while(t)
{
fin>>a>>b;
t--;
int k=0;
int i=1;
while(i<=nrp&&prime[i]*prime[i]<b)
{
if(b%prime[i]==0)
{
v[++k]=prime[i];
while(b%prime[i]==0) b/=prime[i];
}
i++;
}
if(b>1) v[++k]=b;
long long rez=a;
for(i=1;i<(1LL<<k);i++)
{
int nrc=0;
long long p=1;
for(j=0;j<k;j++)
{
if(i&(1LL<<j))
{
nrc++;
p*=v[j+1];
}
if(nrc%2==1) rez=rez-a/p;
else rez=rez+a/p;
}
}
fout<<rez<<'\n';
}
return 0;
}