CODE[VS]1012 最大公约数和最小公倍数问题

来源:互联网 发布:js隐藏滚动条 编辑:程序博客网 时间:2024/06/08 15:00

题目:http://codevs.cn/problem/1012/
思路:p*q = x0 * y0,p的值为x0的倍数,最大为y0,遍历所有p,q值,计算满足条件的个数。
题解:

/* 1012 最大公约数和最小公倍数问题  */#include <stdio.h>/* 求取最大公约数 */ int gcd(int m, int n){    return (m % n == 0) ? n : gcd(n, m % n); }/* 主函数入口 */ int main(int argc, char *argv[]) {    long x0, y0;        /* 最大公约数,最小公倍数 */     long p, q;          /* p q */     int count = 0;      /* 计数 */     int i;              /* 索引 */     /* 获取最大公约数,最小公倍数 */     scanf("%ld %ld", &x0, &y0);    /* p值从1至y0/x0遍历,q = (x0 * y0) / p */     for(i = 1; i <= y0 / x0; i++){        p = x0 * i;        /* q不为整数,退出本次循环 */         if(y0 % p != 0){            continue;        }         /* 获取q值 */         q = x0 * (y0 / p);        /* q值大于p值退出循环 */         if(q < p){            break;        }        /* 如果满足最大公约数条件,计数器加2 */         if(gcd(q, p) == x0){            count = count + 2;        }    }    /* 打印结果 */     printf("%d", count);    return 0;}