zoukankan      html  css  js  c++  java
  • P1072 HanksonHankson 的趣味题

    题意:给定$a_0,a_1,b_0,b_1$

       问有多少x满足1:$gcd(x,a_0)=a_1$

              2:$lcm(x,b_0)=b_1$

    思路:暴力枚举(当然不是死枚举)

       枚举$a_1$的倍数,判断。。

      然而,,,,50分+TLE

    正解:

    首先:对于已知:1:$gcd(x,a_0)=a_1$得

                  $gcd(frac{x}{a_1},frac{a_0}{a_1})=1$

                                2:$lcm(x,b_0)=b_1$ 可得

              $gcd(x,b_0)=x*frac{b_0}{lcm(x,b_0)}=x*frac{b_0}{b_1}$

              所以:$gcd(frac{x}{frac{x*b_0}{b_1}},frac{b_0}{frac{x*b_0}{b_1}})=1$

              化简得:$gcd(frac{b_1}{b_0},frac{b_1}{x})=1$

      整理一下:  $left{egin{aligned}gcd(frac{x}{a_1},frac{a_0}{a_1})=1\gcd(frac{b_1}{b_0},frac{b_1}{x})=1end{aligned} ight.$

    所以: x 是 $a_1$ 的整数倍而且是$b_1$的因子

    做法:$O(sqrt{b_1})$枚举 $b_1$ 的因子(也就是 x),如果这个数是 $a_1$ 的整数倍并且满足那两个式子,则 ans++

      

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    #define olinr return
    #define love_nmr 0
    #define _ 0
    int n;
    int a0,a1,b0,b1;
    int ans;
    inline int gcd(int x,int y)
    {
        return y? gcd(y,x%y):x;
    }
    signed main()
    {
        scanf("%d",&n);
        while(n--)
        {
            ans=0;
            scanf("%d%d%d%d",&a0,&a1,&b0,&b1);
            int A=a0/a1;
            int B=b1/b0;
            for(int i=1;i*i<=b1;i++)
            {
                if(b1%i==0)
                {
                    if(i%a1==0&&gcd(i/a1,A)==1&&gcd(b1/i,B)==1) ans++;
                    int ano=b1/i;
                    if(ano==i) continue;
                    if(ano%a1==0&&gcd(ano/a1,A)==1&&gcd(b1/ano,B)==1) ans++;
                }
            }
            printf("%d
    ",ans);
        }
        olinr ~~(0^_^0)+love_nmr;
    }

      

  • 相关阅读:
    UDP和TCP是网络通讯
    HTTPS
    Kubernetes Ingress API Ingress资源通过允许API网关样式的流量路由
    30条黄金法则
    工作流
    开发注意H5移动端
    Wireshark TCP
    关于dotnet跨平台 和 移动开发&人工智能 微信公众号
    超燃| 2019 中国.NET 开发者峰会视频发布
    免费下载 80多种的微软推出入门级 .NET视频
  • 原文地址:https://www.cnblogs.com/olinr/p/9486427.html
Copyright © 2011-2022 走看看