Pagini recente » Cod sursa (job #2389579) | Cod sursa (job #557484) | Cod sursa (job #567657) | Cod sursa (job #977684) | Cod sursa (job #2924832)
#include <fstream>
using namespace std;
ifstream fin("pinex.in");
ofstream fout("pinex.out");
long long prime[1000004], fact[31];
bool ciur[1000004];
void ciurf()
{
for(long long i=2; i<=1000000; i++)
if(ciur[i]==0)
{
prime[0]++;
prime[prime[0]]=i;
for(long long j=2; i*j<=1000000; j++)
ciur[i*j]=1;
}
}
void rez(long long a, long long b)
{
long long i=1;
for(i=0; i<=30; i++)
fact[i]=0;
i=1;
while(b>1 && i<=prime[0])
{
if(b%prime[i]==0)
{
fact[0]++;
fact[fact[0]]=prime[i];
while(b%prime[i]==0)
b/=prime[i];
}
i++;
}
if(b>1)
{
fact[0]++;
fact[fact[0]]=b;
}
long long r=0;
for(i=1; i<(1<<fact[0]); i++)
{
long long semn=0, prod=1;
for(long long j=0; (1<<j)<=i; j++)
if((1<<j) & i)
{
semn++;
prod*=fact[j+1];
}
if(semn%2==1)
semn=1;
else semn=-1;
r+=semn*a/prod;
}
fout<<a-r<<'\n';
}
long long n, a, b;
int main()
{
ciurf();
fin>>n;
for(long long i=1; i<=n; i++)
{
fin>>a>>b;
rez(a, b);
}
return 0;
}