2 条题解

  • 0
    @ 2025-9-27 22:37:08

    cpp

    void solve(){
    	int a,b; cin>>a>>b;
    	int x=gcd(a,b); //cpp不用写gcd函数,自带
    	int y=a/x*b;
    	cout<<x<<" "<<y<<endl;
    }
    

    知识点

    lcm(a,b)gcd(a,b)=ablcm(a,b)*gcd(a,b)=a∗b
    • 0
      @ 2025-9-26 22:54:35

      方法思路:

      最大公约数(GCD):

      使用欧几里得算法。核心思想是:用较大数除以较小数得到余数,再用除数除以余数,重复此过程直到余数为 0,此时的除数即为最大公约数。

      最小公倍数(LCM):

      利用公式LCM(a,b)=ab/GCD(a,b)LCM(a,b) = a*b/GCD(a,b)
      (因为两个数的乘积等于它们的最大公约数和最小公倍数的乘积)

      #include <stdio.h>
      
      // 辗转相除法求最大公约数
      int gcd(int x, int y) {
          int remainder;
          while (y != 0) {
              remainder = x % y;
              x = y;
              y = remainder;
          }
          return x;
      }
      
      int main() {
          int a, b;
          // 输入两个正整数
          scanf("%d %d", &a, &b);
          
          // 计算最大公约数
          int gcd_val = gcd(a, b);
          // 计算最小公倍数
          int lcm_val = a * b / gcd_val;
          
          // 输出结果
          printf("%d %d\n", gcd_val, lcm_val);
          
          return 0;
      }
      
      • 1

      信息

      ID
      616
      时间
      1000ms
      内存
      256MiB
      难度
      6
      标签
      (无)
      递交数
      26
      已通过
      12
      上传者