HDU1019 水题+精度

来源:互联网 发布:日本美瞳 知乎 编辑:程序博客网 时间:2024/06/05 19:27

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1019

输入一串数字,求着串数字的最小公倍数。结果在32位以内。

思路:首先求最小公倍数的求法为a*b/ab的最小公约数,多个数就是重复这一过程。求最小公约数可以用辗转相除法。

但是注意a,b都是32位,相乘就超过了,所以可以用long long类型,或者a/ab在最小公约数再*b.

辗转相除法:

int cal (int a,int b)
{
return b?cal(b,a%b):a;
}

#include<stdio.h>  int main(){        int N;        int n, m;        scanf("%d", &N);        while (N--)            {               int num = 1;          while (scanf("%d%d", &n, &m) != EOF && (n || m))               {                   int sum = 0;                    int i, j;                   for (i = 1; i<n; i++)                       {                           for (j = i + 1; j<n; j++)                               {                                    if ((i*i + j*j + m) % (i*j) == 0)                                                sum++;                                }                       }                    printf("Case %d: %d\n", num++, sum);                   }               if (N)                  printf("\n");        }        return 0;    }

原创粉丝点击