• P1072Hankson的趣味题


    传送

    这个题一本通上有,但是为了增强我们的创新精神,思维能力balabala,书上的满分程序不全,要优化一下,在此写一下第二种方法

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    using namespace std;
    long long k,n,a0,a1,b0,b1,ans;
    long long gcd(long long a,long long b)
    {
        if(b==0)return a;
        else{return gcd(b,a%b);
        }
    }
    int main()
    {
        cin>>n;
        for(long long i=1;i<=n;i++)
        {   ans=0;
            cin>>a0>>a1>>b0>>b1;
            for(long long j=1;j<=sqrt(b0);j++)
            { if(b0%j==0)
              {k=b1/b0*j;
              if(gcd(k,a0)==a1&&j==gcd(k,b0))ans++;
              k=b1/b0*(b0/j);
              if(b0/j!=j&&gcd(k,a0)==a1&&gcd(k,b0)==b0/j)ans++;  
              }
            }
            long long t=sqrt(b0);
              if(t!=b0&&t*t==b0&&b0%k==t)
              {k=b1/b0*t;
                if(gcd(k,a0)==a1&&t==gcd(k,b0))ans++;
              }
            cout<<ans<<endl;
        }
    }

    书上从1到√b0枚举gcd(x,b0),并分i为gcd(x,b0),b0/i为gcd(x,b0)以及特判i*i=b0,但是会出现一个i被多次判断的情况,所以要在if里特判一下

  • 相关阅读:
    关于通过web页面删除数据记录的设计改进
    python 正则表达式用法
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
    每日日报
  • 原文地址:https://www.cnblogs.com/lcez56jsy/p/10549025.html
Copyright © 2020-2023  润新知