Pagini recente » Cod sursa (job #1923287) | Cod sursa (job #1194292) | Cod sursa (job #1249506) | Cod sursa (job #2512243) | Cod sursa (job #2501511)
#include <fstream>
using namespace std;
ifstream in("pinex.in");
ofstream out("pinex.out");
const int N=1000000000000LL;
int dv[1000],nrprim[35000];
int main()
{
int m,flag;
long long cnt,d,cntd,i,a,b;
long long rez;
cntd=0;
for(i=2; i*i<N; i++)
{
flag=1;
for(d=2; d*d<=i; d++)
{
if(i%d==0)
{
flag=0;
break;
}
}
if(flag==1) nrprim[cntd++]=i;
}
flag=0;
i++;
while(flag==0)
{
flag=1;
for(d=2; d*d<=i; d++)
{
if(i%d==0)
{
flag=0;
break;
}
}
if(flag==1) nrprim[cntd++]=i;
i++;
}
in>>m;
for(int k=1; k<=m; k++)
{
in>>a>>b;
cnt=0;
d=0;
while(nrprim[d]*nrprim[d] <= b)
{
if(b%nrprim[d]==0)
{
dv[cnt++]=nrprim[d];
while(b%nrprim[d]==0)
{
b/=nrprim[d];
}
}
d++;
}
if(b>1) dv[cnt++]=b;
rez = 0;
for(i=0; i<(1<<cnt); i++)
{
long long nre = 0, prod = 1;
for(int j=0; j<cnt; j++)
{
if(i&(1<<j))
{
prod *= dv[j];
nre++;
}
}
if (nre % 2 == 0)
{
rez += a / prod;
}
else
{
rez -= a / prod;
}
}
out << rez << "\n";
}
return 0;
}