Pagini recente » Cod sursa (job #1731185) | Cod sursa (job #1709599) | Cod sursa (job #253492) | Cod sursa (job #1709890) | Cod sursa (job #2501464)
#include <fstream>
using namespace std;
ifstream in("pinex.in");
ofstream out("pinex.out");
const int N=1000000000;
int dv[1000],ciur[40000],nrprim[30000];
int main()
{
int m,a,b,cnt,d,cntd;
long long rez;
ciur[0]=ciur[1]=1;
cntd=0;
for(int i=2; i*i<=N; i++)
{
if(ciur[i]==0)
{
nrprim[cntd++]=i;
for(int j=i*i; j<=N; j+=i) ciur[j]=1;
}
}
in>>m;
for(int k=1; k<=m; k++)
{
in>>a>>b;
cnt=0;
d=0;
while(b>1)
{
if(b%nrprim[d]==0)
{
dv[cnt++]=d;
while(b%d==0)
{
b/=d;
}
}
d++;
}
while(b>1 && d*d<=b)
{
if(b%d==0)
{
dv[cnt++]=d;
while(b%d==0)
{
b/=d;
}
}
d++;
}
if(b>1) dv[cnt++]=b;
rez = 0;
for(int 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;
}