2 条题解

  • 1
    @ 2023-4-23 21:36:49

    x 一定是 b1 的约束

    一个数的约数一定小于 2x\sqrt{x}

    所以枚举到 x\sqrt{x} 即可

    而一个数的约束其实更少只有几千

    所先看每个数是否是约束在看其他条件符合吗

    #include<bits/stdc++.h>
    using namespace std;
    #define endl "\n"
    #define int long long
    #define d double
    #define ld long double
    const int MAXN=200000;
    const int MAXM=500000;
    const int MAXQ=500000;
    const int INF=0x1f1f1f1f1f1f1f1f;
    int gcd(int a,int b)
    {
    	if(a<b)
    		swap(a,b);
    	if(b==0)
    		return a;
    	return gcd(b,a%b);
    }
    int lcm(int a,int b)
    {
    	return a*b/gcd(a,b);
    }
    int T;
    int a0,a1,b0,b1;
    signed main()
    {
    	ios::sync_with_stdio(false);
    	cin.tie(0);	
    	cin>>T;
    	while(T--)
    	{
    		cin>>a0>>a1>>b0>>b1;
    		int cnt=0;
    		for(int i=1;i*i<=b1;i++)
    			if(b1%i==0)
    			{
    				if(lcm(b0,i)==b1&&gcd(i,a0)==a1)
    					cnt++;
    				if(i*i!=b1&&b1%i==0&&lcm(b0,b1/i)==b1&&gcd(b1/i,a0)==a1)
    					cnt++;
    			}
    		cout<<cnt<<endl;
    	}
    	return 0;
    }
    
    • 0
      @ 2023-4-15 17:05:07
      #include <bits/stdc++.h>
      using namespace std;
      int T;
      int a0, a1, b0, b1;
      int gcd(int a, int b)
      {
          if (b == 0)
              return a;
          return gcd(b, a % b);
      }
      int lcm(int a, int b)
      {
          return a / gcd(a, b) * b;
      }
      int main()
      {
          ios::sync_with_stdio(false);
          cin.tie(0);
          cin >> T;
          while (T--)
          {
              cin >> a0 >> a1 >> b0 >> b1;
              int cnt = 0;
              for (int i = 1; i * i <= b1; i++)
                  if (b1 % i == 0)
                  {
                      if (lcm(i, b0) == b1 && gcd(i, a0) == a1)
                          cnt++;
                      if (i * i != b1)
                      {
                          int ii = b1 / i;
                          if (lcm(ii, b0) == b1 && gcd(ii, a0) == a1)
                              cnt++;
                      }
                  }
              cout << cnt << "\n";
          }
          return 0;
      }
      
      • 1

      信息

      ID
      105
      时间
      1000ms
      内存
      128MiB
      难度
      5
      标签
      递交数
      29
      已通过
      13
      上传者