Pagini recente » Cod sursa (job #1462591) | Cod sursa (job #1501110) | Cod sursa (job #524643) | Cod sursa (job #1466618) | Cod sursa (job #2256076)
#include <fstream>
#define MAX 1000000
using namespace std;
bool prim[MAX+5];
int k,nrprim[MAX+5];
long long v[MAX+5];
void CIUR()
{
for(int i=2;i<=MAX;i++)
if(!prim[i])
{
nrprim[++k]=i;
for(int j=2*i;j<=MAX;j+=i)
prim[j]=1;
}
}
int main()
{
ifstream f("pinex.in");
ofstream g("pinex.out");
int Q;
f>>Q;
CIUR();
for(int q=1;q<=Q;q++)
{
long long a,b;
int n=0;
f>>a>>b;
for(int i=1;nrprim[i]*nrprim[i]<=b;i++)
{
if(b%nrprim[i]==0)
{
while(b%nrprim[i]==0)
b/=nrprim[i];
v[++n]=nrprim[i];
}
}
if(b>1)
v[++n]=b;
long long card=a;
int maxi=(1<<n);
for(int i=1;i<maxi;i++)
{
long long p=1,m=0;
for(int j=0;j<n;j++)
if((1<<j)&i)
{
m++;
p=p*v[j+1];
}
if(m%2==0)
card=card+a/p;
else
card=card-a/p;
}
g<<card<<"\n";
}
return 0;
}