九度 1493:公约数

题目描述:
给定两个正整数a,b(1<=a,b<=100000000),计算他们公约数的个数。
如给定正整数8和16,他们的公约数有:1、2、4、8,所以输出为4。

输入:
输入包含多组测试数据,每组测试数据一行,包含两个整数a,b。

输出:
对于每组测试数据,输出为一个整数,表示a和b的公约数个数。

样例输入:
8 16
22 16
样例输出:
4
2
来源:
2013年王道论坛计算机考研机试全真模拟考试

 


 

#include<stdio.h>
int swap(int &a,int &b)
{
    int t;
    t=a;
    a=b;
    b=t;
}
int main()
{
    int i,n,m,sum,num1,num2;
    while(~scanf("%d %d",&n,&m))
    {
       if(n>m)
       swap(n,m);
       sum=0;
       for(i=1;i*i<=n;i++)//只按里面比较小的数对半求 
       {
          if(n%i==0)
          {   
              num1=i;
              num2=n/i;
              if(num1!=num2)
              {
                  if(m%num1==0&&n%num1==0) sum++;     
                  if(m%num2==0&&n%num2==0) sum++;        
              }
              else
              {
                  if(m%num1==0&&n%num1==0) sum++;
              }
          }
       }
       printf("%d\n",sum);
    }
    return 0;
}

 

你可能感兴趣的:(C++,C语言,ACM,OJ,九度,公约数,1493)