Pagini recente » Cod sursa (job #990075) | Cod sursa (job #177338) | Cod sursa (job #2811855) | Cod sursa (job #187994) | Cod sursa (job #1921413)
#include <fstream>
#define valMax 1000005
#define pMax 80001
using namespace std;
ifstream fin("pinex.in");
ofstream fout("pinex.out");
int t, prime[pMax], fact[pMax], viz[valMax], sol[pMax];
long long A, B, Sol;
void ciur()
{
prime[++prime[0]]=2;
for(int i=3; i<valMax; i+=2)
{
if(viz[i]==0)
{
prime[++prime[0]]=i;
for(int j=i+i+i; j<valMax; j+=(i << 1))
viz[j]=1;
}
}
}
void back(int k, long long prod, int nr)
{
for(int i=sol[k-1]+1; i<=fact[0]; i++)
{
Sol+=1ll*nr*(A/(1ll*prod*fact[i]));
sol[k]=i;
back(k+1, 1ll*prod*fact[i], -nr);
}
}
int main()
{
ciur();
fin>>t;
while(t--)
{
fin>>A>>B;
for(int i=1; i<=prime[0] && B!=1; i++)
{
if(B%prime[i]==0)
{
fact[++fact[0]]=prime[i];
while(B%prime[i]==0)
B/=prime[i];
}
if(prime[i]*prime[i]>B && B>1)
{
fact[++fact[0]]=B;
B=1;
}
}
Sol=A;
back(1, 1, -1);
fout<<Sol<<'\n';
fact[0]=Sol=0;
}
}