• 洛谷 P1072 Hankson 的趣味题 题解


    题面

    提前知识:gcd(a/d,b/d)*d=gcd(a,b);

         lcm(a,b)=a*b/gcd(a,b);

    那么可以比较轻松的算出:gcd(x/a1,a0/a1)==gcd(b1/b0,b1/x)==1;

    那么我们求解的x仅仅从b1的因数中挑选就可以,x要符合以上条件且x%a1==0;

    时间复杂度是O(sqrt(b1)*n+log(n));

    #include <iostream>
    #include <cstring>
    #include <cmath>
    #define cin std::ios::sync_with_stdio(false); cin
    #define cout std::ios::sync_with_stdio(false); cout
    using namespace std;
    int a0,a1,b0,b1;
    int tmp[1000010];
    int gcd(int a,int b)
    {
        if(!b) return a;
        return gcd(b,a%b);
    }
    int main()
    {
        register int t;
        cin>>t;
        while(t--){
            cin>>a0>>a1>>b0>>b1;
            memset(tmp,0,sizeof(tmp));
            tmp[0]=0;
            int op=sqrt(b1);
            for(register int i=1;i<=op;i++){
                if(b1%i==0) tmp[++tmp[0]]=i;
            }
            int ans=0;
            for(register int i=1;i<=tmp[0];i++){
                if(tmp[i]%a1==0&&gcd(tmp[i]/a1,a0/a1)==1&&gcd(b1/b0,b1/tmp[i])==1){
                    ++ans;
                }
                register int y=b1/tmp[i];
                if(tmp[i]==y) continue; 
                if(y%a1==0&&gcd(y/a1,a0/a1)==1&&gcd(b1/b0,b1/y)==1){
                    ++ans;
                } 
            }
            cout<<ans<<endl;
        }    
    }
  • 相关阅读:
    uva 10129 poj 1386 hdu 1116 zoj 2016 play on words
    redis持久化
    Redis事务
    非阻塞I/O多路复用机制
    SFTP
    FTP
    http协议特点及session共享及单点登录
    什么是cookie以及cookie的特性、优缺点
    异步IO和同步IO的区别:
    TCP操作与原理
  • 原文地址:https://www.cnblogs.com/kamimxr/p/11384414.html
Copyright © 2020-2023  润新知