九度 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;
}

 

相关文章
|
7月前
|
C++
筛质数、分解质因数和快速幂的应用
筛质数、分解质因数和快速幂的应用
49 0
|
21天前
|
机器学习/深度学习 存储 人工智能
每日练习之矩阵乘法——斐波那契公约数
每日练习之矩阵乘法——斐波那契公约数
14 0
|
1月前
|
算法
辗转相除法求最大公约数
辗转相除法求最大公约数
|
1月前
|
人工智能 算法
DAY-1 | 迭乘法、辗转相除法、试除法:最大公约数与最小公倍数问题
这段内容是一个关于计算两个数的最大公约数(Greatest Common Divisor, GCD)和最小公倍数(Least Common Multiple, LCM)的编程题目说明,包括题干、题解和方法总结。其中提到了两种方法:辗转相除法和试除法。辗转相除法通过不断用较大数除以较小数直到余数为零来求最大公约数,然后利用两数乘积除以最大公约数得到最小公倍数。试除法则是通过循环尝试两数的倍数是否同时能被两数整除来求解。在方法总结部分,还介绍了迭乘法求最小公倍数的方法。
31 0
|
7月前
一个求公约数和公倍数的有趣求法
一个求公约数和公倍数的有趣求法
19 0
|
10月前
|
算法 C语言 C++
【数论】最大公约数、约数的个数与约数之和定理
先来科普下什么是约数:当a能被b整除,我们就说b为a的约数,b的倍数为a
85 0
|
算法 C++
【基础算法】几种特殊数(素数、公约数、完全数、亲密数) & C++实现
素数又称为质数,它指在一个大于1的自然数中,除了1和它自身外,没法被其他自然数整除的数。比1大,但不是素数的数称为合数。0和1既不是素数,也不是合数。因为素数的分布没有明显的规律,所以在程序中一般根据素数的定义来判断该数是否为素数。例如哥德巴赫猜想:哥德巴赫通过大量的数据猜测,所有不小于6的偶数,都可以表示为两个奇素数之和。后人将其称之为“1+1”。并且,对于每个不小于9的奇数,都可以表示为三个奇素数之和。
263 0
【基础算法】几种特殊数(素数、公约数、完全数、亲密数) & C++实现
辗转相除法 求最大公约数
辗转相除法 求最大公约数
774 0
|
测试技术
多少个约数
多少个约数
83 0
多少个约数
欧几里得算法,既辗转相除法。用于计算正整数a,b的最大公约数
欧几里得算法,既辗转相除法。用于计算正整数a,b的最大公约数
90 0