Pagini recente » Cod sursa (job #1412243) | Cod sursa (job #899841) | Cod sursa (job #1350087) | Cod sursa (job #2161011) | Cod sursa (job #2419727)
#include <fstream>
using namespace std;
long long Q, a, b, i, j, dim, P[500001], divi[30], d, ok, aux1, aux2, pr, nr, sol, val;
bool p[1000001];
bool sub[21];
int main()
{
ifstream fin ("pinex.in");
ofstream fout ("pinex.out");
fin>>Q;
p[1]=1;
for (i=2; i<=1000000; i++)
if (p[i]==0) {
P[++dim]=i;
for (j=2*i; j<=1000000; j+=i)
p[j]=1;
}
aux1=dim;
for (int q=1; q<=Q; q++)
{
fin>>a>>b;
dim=0;
sol=0;
for (d=1; d<=aux1 && b!=1; d++)
if (b%P[d]==0)
{
divi[++dim]=P[d];
ok=1;
while (b%P[d] == 0)
b /= P[d];
}
if (b!=1) {
divi[++dim] = b;
}
/// if (ok==0)
/// divi[++dim]=b;
for (j=1; j<=dim; j++)
sub[j]=0;
val=(1<<dim)-1;
for (i=1; i<=val; i++)
{
pr=1;
nr=0;
aux2=dim;
while (sub[aux2]==1)
{
sub[aux2]=0;
aux2--;
}
sub[aux2]=1;
for (j=1; j<=dim; j++)
if (sub[j]==1)
{
pr*=divi[j];
nr++;
}
if (nr%2==0)
sol-=a/pr;
else
sol+=a/pr;
}
fout<<a-sol<<"\n";
}
}