Pagini recente » Cod sursa (job #2739605) | Cod sursa (job #1377581) | Cod sursa (job #1703023) | Cod sursa (job #3002818) | Cod sursa (job #920162)
Cod sursa(job #920162)
#include <fstream>
#include <bitset>
#define LL long long
using namespace std;
ifstream in ("pinex.in"); ofstream out ("pinex.out");
int m,nr,n,k;
LL a,b;
bitset<1000001> w;
int x[17];
LL p[80000];
LL d[17];
void ciur()
{
for(int i = 2; i <= 1000000; i++)
{
if(!w[i])
{
p[++nr]=i;
for(int j = i+i; j <=1000000; j+=i )
{
w[j]=1;
}
}
}
}
inline void desc()
{
int i = 1;
n=0;
while(p[i]*p[i]<=b)
{
if(!(b%p[i]))
{
d[++n]=p[i];
while(!(b%p[i]))b/=p[i];
}
i++;
}
if(b>1) d[++n]=b;
}
LL s;
inline void prelSol()
{
int n1 = 0;
LL prod = 1;
for(int i = 1; i <=n ;i++)
{
n1+=x[i];
if(x[i])prod*=d[i];
}
if(n1)
{
if(n1%2) s-=a/prod;
else s+=a/prod;
}
}
void back()
{
k=1;
x[k]=-1;
do
{
while(x[k]<1)
{
x[k]++;
if(k==n) prelSol();
else x[++k]=-1;
}
k--;
}while(k);
}
int main()
{
in >> m;
ciur();
while(m--)
{
in >> a >> b;
desc();
s=a;
back();
out << s << '\n';
}
}