• [Jobdu] 题目1493:公约数


    题目描述:

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

    输入:

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

    输出:

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

    样例输入:
    8 16
    22 16
    样例输出:
    4
    2

    五星级题目,其实就是考察对程序的优化,公约数的约数肯定也是他们的公约数!我们只要遍历从找1到sqrt(gdc)的公约数就行,注意这里要加上2!因为在sqrt(x)到x区间还有一个约数!还有就是注意边界特例!

     1 #include <iostream>
     2 using namespace std;
     3  
     4 int gcd(int a, int b) {
     5     int m = a > b ? a : b;
     6     int n = a > b ? b : a;
     7     return n == 0 ? a : gcd(n, m % n);
     8 }
     9  
    10 int main() {
    11     int a, b;
    12     int max;
    13     int count;
    14     int i;
    15     while (cin >> a >> b) {
    16         count = 0;
    17         max = gcd(a, b);
    18         for (i = 1; i * i < max; ++i) {
    19             if (max % i == 0)
    20                 count += 2;
    21         }
    22         if (i * i == max) 
    23             ++count;
    24         cout << count << endl;
    25  
    26     }
    27     return 0;
    28 }
    29 /**************************************************************
    30     Problem: 1493
    31     User: hupo250
    32     Language: C++
    33     Result: Accepted
    34     Time:30 ms
    35     Memory:1520 kb
    36 ****************************************************************/
  • 相关阅读:
    百万级数据库优化方案
    MySQL架构及优化原理
    性能优化建议
    索引
    sql语句优化(持续更新)
    sql语句优化原理
    常用命令
    常见问题
    三、范围和生命周期
    【UVa】[11582]Colossal Fibonacci Numbers!
  • 原文地址:https://www.cnblogs.com/easonliu/p/3657334.html
Copyright © 2020-2023  润新知