Pagini recente » Cod sursa (job #283184) | Cod sursa (job #2147747) | Cod sursa (job #2868522) | Cod sursa (job #3248806) | Cod sursa (job #557522)
Cod sursa(job #557522)
#include <vector>
#include <fstream>
#include <cstdlib>
#define N_MAX 70011
using namespace std;
char isPrime[N_MAX];
int main( void )
{
int M, _count;
long long int A, B, i, j, s, till, p;
ifstream in( "pinex.in" );
ofstream out( "pinex.out" );
for( in>>M; M; --M )
{
in>>A>>B;
vector< int > isDivB;
if( 0 == B%2 )
{
isDivB.push_back(2);
for( ; 0 == B%2; B/=2 );
}
for( i=3; 1LL*i*i <= B; ++i )
if( 0 == B%i )
{
isDivB.push_back(i);
for( ; 0 == B%i; B/=i );
}
if( B > 1 )
isDivB.push_back(B);
till=1<<(isDivB.size());
for( i=1, s=0; i < till; ++i )
{
for( p=1, _count=j=0; (1<<j) <= i; ++j )
if( i&(1<<j) )
{
++_count;
p*=isDivB[j];
if( p > A )
break;
}
if( (1<<j) <= i )
continue;
if( 0 == _count%2 )
p*=-1;
s+=A/p;
}
out<<(A-s)<<'\n';
}
return EXIT_SUCCESS;
}