#include #include #include #include #include #include #include #include #include #include #include #include #include #pragma warning( disable:4996 ) using namespace std; typedef unsigned long long ull; template inline T sqr(T a) { return a*a; } template inline int size(const T& c) { return (int)c.size(); } #define zero(a) memset( &a, 0, sizeof(a) ) #define TEST_CASE -1 #define DEBUG long long A, B, C, L, R; vector< long long > D; int K; int main() { FILE *fin = fopen("game.in", "r"); FILE *fout = fopen("game.out", "w+"); long long i; int j, cnt; fscanf( fin, "%I64d %I64d", &A, &B ); fscanf( fin, "%d", &K ); C = min( A, B ); for ( i = 1; i <= (long long)sqrt( (long double)C ); i++ ) { if ( ( A % i == 0 ) && ( B % i == 0 ) ) D.push_back( i ); if ( (B % i == 0 ) && ( A % ( B/i ) == 0 ) ) D.push_back( B/i ); if ( (A % i == 0 ) && ( B % ( A/i ) == 0 ) ) D.push_back( A/i ); } sort( D.begin(), D.end() ); D.erase( unique( D.begin(), D.end() ), D.end() ); /* for ( i = 0; i < size(D); i++ ) cout << D[i] << endl; */ for ( i = 0; i < K; i++ ) { fscanf( fin, "%I64d %I64d", &L, &R ); cnt = 0; for ( j = 0; j < size(D); j++ ) if ( D[j] > R ) { break; } else if ( ( D[j] >= L ) && ( D[j] <= R ) ) { cnt++; } fprintf( fout, "%d\n", cnt ); } fclose( fin ); fclose( fout ); return 0; }