Pagini recente » Cod sursa (job #2507571) | Cod sursa (job #1466978) | Cod sursa (job #3293710) | Cod sursa (job #842135) | Cod sursa (job #1935678)
#include<bits/stdc++.h>
using namespace std;
int ciur[1000200], d[500],b,a,t, c[100000],cn,cd;
int main()
{
ifstream cin("pinex.in");
ofstream cout("pinex.out");
cin >> t;
for(int i = 2; i<= 1000100; i++)
{
if(!ciur[i])
{
c[cn] = i;
cn++;
for(int j = i; j <= 1000100;j+=i)
{
ciur[j] = 1;
}
}
}
while(t--)
{
int rez = 0, aux = 0;
cin >> a >> b;
int cd = 0;
aux = b;
for(int i = 0; i < cn && b != 1; i++)
{
if(b%c[i] == 0)
{
d[cd] = c[i];
cd++;
while(b%c[i] == 0)b/=c[i];
}
}
if(b != 1) {
d[cd] = b;
cd++;
}
for(int i = 0; i < 1 << cd; i++)
{
int k = 0, num = 1;
for(int j = 0; j < cd; j++)
{
if((1<<j) & i)
{
num *= d[j];
k++;
}
}
if (k%2) rez -= a/num;
else rez += a/num;
}
// int brut = 0;
// for(int i =1; i <= a; i++) if (__gcd(i,aux) == 1) brut++;
// cout << brut << " ";
cout << rez << "\n";
}
}