题目描述 Description

输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数

条件:  1.P,Q是正整数

2.要求P,Q以x0为最大公约数,以y0为最小公倍数.

试求:满足条件的所有可能的两个正整数的个数.

输入描述 Input Description

二个正整数x0,y0

输出描述 Output Description

满足条件的所有可能的两个正整数的个数

样例输入 Sample Input

3 60

样例输出 Sample Output

4

WIKIOI难度等级:通过初赛

总耗时:346ms  内存占用:0kb  语言:C++  代码:1042B


   
  1. #include <iostream> 
  2.   
  3. using namespace std; 
  4.   
  5. int gcd(int a,int b) 
  6.     if(a<b) 
  7.     { 
  8.         return gcd(b,a); 
  9.     } 
  10.     if(b==0) 
  11.     { 
  12.         return a; 
  13.     } 
  14.     if(a&1) 
  15.     { 
  16.         if(b&1) 
  17.         { 
  18.             return gcd(b,a-b); 
  19.         } 
  20.         else 
  21.         return gcd(a,b>>1); 
  22.     } 
  23.     else 
  24.     { 
  25.         if(b&1) 
  26.         { 
  27.             return gcd(a>>1,b); 
  28.         } 
  29.         else 
  30.         { 
  31.             return gcd(a>>1,b>>1)<<1; 
  32.         } 
  33.     } 
  34.   
  35. int main(int argc,char *argv[]) 
  36.       
  37.     int x0,y0,i,j,sign=0,temp; 
  38.       
  39.     cin>>x0>>y0; 
  40.     for(i=x0;i<=y0;i++) 
  41.     { 
  42.         for(j=x0;j<=y0;j++) 
  43.         { 
  44.             if(j%x0==0&&i%x0==0) 
  45.             { 
  46.                 temp=gcd(i,j); 
  47.                 if(temp==x0) 
  48.                 { 
  49.                     if(i*j/x0==y0) 
  50.                     { 
  51.                         sign++; 
  52.                     } 
  53.                 } 
  54.             } 
  55.         } 
  56.   
  57.     } 
  58.     cout<<sign; 
  59.       
  60.     return 0;