4 条题解

  • 4
    @ 2023-6-10 15:47:43

    image

    • 3
      @ 2023-10-4 12:38:56
      #include<bits/stdc++.h>
      using namespace std;
      int x,y,cnt=0;
      int main(){
          cin>>x>>y;
          if(y%x!=0){
              cout<<0;
              return 0;
          }
          for(int i=2;i<x*y;i++)if(x*y%i==0)cnt++;
          cout<<cnt;
          return 0;
      }
      
      • 1
        @ 2023-7-2 22:52:01
        #include <iostream>
        using namespace std;
        int gcd(int x, int y)
        {
            if (y == 0)
                return x;
            return gcd(y, x % y);
        }
        int main()
        {
            int x, y, ans = 0;
            cin >> x >> y;
            for (int i = x; i <= y; i++)
                if (x * y % i == 0 && gcd(i, x * y / i) == x)       
                		ans++;
            cout << ans;
        }
        
        • 0
          @ 2023-11-23 22:09:14

          #include <iostream> using namespace std;

          int gcd(int a,int b) { if(b == 0) return a; else return gcd(b,a % b); }

          int main() { int x0,y0,cnt = 0; cin >> x0 >> y0; if(y0 % x0 != 0) { cout << 0; return 0; } for(int i = x0;i <= y0;i += x0) { int j = x0 * y0 / i; if(j * i != x0 * y0) continue;

              if(gcd(i,j) == x0)
              {
                 cnt++;
                 cout << i << ' ' << j << endl;
              }
          }
          cout << cnt;
          return 0;
          

          }

          一个比较麻烦,但比较容易理解的办法

          首先,输入x0,y0以后先进行一次特判,因为如果有多组数据同时满足最小公倍数为y0,最大公约数为x0的话, 那么x0,y0以及y0,x0这两组数据是绝对满足的,当y0,x0这组数据不满足情况时,其它数据也不会满足

          然后,枚举Q和N,根据前面推出的x0,y0和y0,x0一定满足情况可以进一步推出Q和N的取值范围为x0~y0,这里先枚举Q

          根据 最小公倍数 = Q * N / 最大公约数 可以得到 N = 最小公倍数 * 最大公约数 / Q = x0 * y0 / Q 因为N,Q都是int类型,C++在计算整数相除时会向下取整,所以算完以后先要判断Q * N == x0 * y0是否成立然后再判断

          然后计算两数的最大公约数,这里采取辗转相除法来求最大公约数(当然,也可以用枚举,但时间复杂度会更高), 当这两个数满足 最大公约数 == x0 时,说明满足情况,答案+1

          这里不需要判断两数的最小公倍数,因为最小公倍数和最大公约数(x0,y0)都是确定的值,Q是枚举出来的,也可以当作定值,也就是说,只要Q,N都为整数且相乘=x0 * y0,那么Q和N的最小公倍数一定为y0

          • 1

          [普及][NOIP2001 普及组] 最大公约数和最小公倍数问题

          信息

          ID
          1514
          时间
          1000ms
          内存
          256MiB
          难度
          3
          标签
          递交数
          330
          已通过
          183
          上传者