关键点:利用算术基本定理可以重新定义整数a和b的最大公约数和最小公倍数。
详解:http://m.blog.csdn.net/blog/u011328934/24499897
1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 using namespace std; 5 6 void solve( int k ) 7 { 8 int ans = 1; 9 for ( int i = 2; i * i <= k; i++ ) 10 { 11 if ( k % i == 0 ) 12 { 13 int cnt = 0; 14 while ( k % i == 0 ) 15 { 16 cnt++; 17 k = k / i; 18 } 19 ans = ans * 6 * cnt; 20 } 21 } 22 if ( k > 1 ) 23 { 24 ans = ans * 6; 25 } 26 printf("%d ", ans); 27 } 28 29 int main () 30 { 31 int t; 32 scanf("%d", &t); 33 while ( t-- ) 34 { 35 int g, l; 36 scanf("%d%d", &g, &l); 37 if ( l % g ) 38 { 39 printf("0 "); 40 } 41 else 42 { 43 solve( l / g ); 44 } 45 } 46 return 0; 47 }