Pagini recente » Cod sursa (job #1666851) | Cod sursa (job #238909) | Cod sursa (job #1780965) | Cod sursa (job #1616533) | Cod sursa (job #720875)
Cod sursa(job #720875)
#include <fstream>
#define nmax 1000005
#define ll long long
using namespace std;
ifstream fin("pinex.in");
ofstream fout ("pinex.out") ;
ll i, j, n, B, m, k;
ll A;
bool v[1000002];
int a[330000] , d[330000];
void ciur()
{
int i , j;
for( i = 2; i < nmax; i++)
{
if( v[i] == 0 )
for(j = i + i ; j < nmax; j += i )
v[j] = 1;
}
for( j = 2; j < nmax; j++ )
if(v[j] == 0 )
{
a[++k] = j;
}
}
ll nrdiv()
{
ll i , nr = 0, x, ok = 1;
ll sol = 0;
for( i = 1 ; i <= k && a[i] <= B; i++)
{
if(B % a[i] == 0)
{
d[++nr] = a[i];
}
}
for( i = 1; i < (1<<nr) ;i++)
{
x = 1;
ok = -1;
for(j = 0 ; j < nr ; j++)
if( ( 1 << j ) & i)
{
x *= d[ j + 1 ] ;
ok*=(-1);
}
sol += A /(x * ok) ;
}
//fout << sol << '\n' ;
fout << A - sol <<'\n' ;
return A - sol ;
}
void calc()
{
int i;
fin >> m ;
for( i = 1; i <= m; i++)
{
fin >> A >> B;
//fout << A << " " << B << '\n';
nrdiv();
}
}
int main()
{
ciur();
calc();
fin.close();
fout.close();
return 0;
}