• Hankson的趣味题


    题目链接:https://www.acwing.com/problem/content/202/

    思路:由于x是b1的约数,所以x的质因子一定也是b1的质因子,

              我们可以对b1的每个质因子p,分别计算a0,a1,b0,b1分别

             包含多少个p.然后讨论x可能含有几个p即可

    #include<iostream>
    #include<algorithm>
    #include<string>
    #include<cstring>
    #include<cstdio>
    #include<cmath>
    using namespace std;
    int a[100005],b[100005];
    int main()
    {
        int k=0;
        for(int i=2; i<=100000; i++)
        {
            if(b[i]==0)
            {
                a[++k]=i;
                for(int j=i; j<=100000/i; j++)
                    b[j*i]=1;
            }
        }
        int t,n,x0,x1,y0,y1;
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d %d %d %d",&x0,&x1,&y0,&y1);
            int ans=1;
            for(int i=1; i<=k; i++)
            {
                int s=0;
                if(y1==1)
                    break;
                if(y1%a[i]==0)
                {
                    while(y1%a[i]==0)
                    {
                        s++;
                        y1=y1/a[i];
                    }
                    int u1=0,u2=0,u3=0;
                    while(x0%a[i]==0)
                    {
                        x0=x0/a[i];
                        u1++;
                    }
                    while(x1%a[i]==0)
                    {
                        x1=x1/a[i];
                        u2++;
                    }
                    while(y0%a[i]==0)
                    {
                        y0=y0/a[i];
                        u3++;
                    }
                    if(u1==u2&&u3<s&&s<u1)
                    {
                        ans=0;
                        y1=1;
                        break;
                    }
                    else if(u1==u2&&u3==s)
                    {
                        if(s<u1)
                        {
                            y1=1;
                            ans=0;
                            break;
                        }
                        else
                        {
                            ans=ans*(s-u1+1);
                        }
                    }
                    else if(u1>u2&&u3<s&&s!=u2)
                    {
                        ans=0;
                        y1=1;
                        break;
                    }
                    else if(u1>u2&&u3==s&&u2>s)
                    {
                        ans=0;
                        y1=1;
                        break;
                    }
                }
            }
            if(y1>1)
            {
                if(y0==y1&&x1==1)
                    ans=ans*2;
                else if(x1!=1)
                    ans=0;
            }
            printf("%d
    ",ans);
        }
    }
    

      

    ;

  • 相关阅读:
    “正则表达式”实践日志
    一种存储数据的方法
    计划
    位运算
    ACM
    ACM-括号匹配问题
    [转]昆明长水机场安防系统应用案例分析
    Request.ServerVariables详细说明
    大数据平台的秘密
    【转】MongoDB资料汇总专题
  • 原文地址:https://www.cnblogs.com/zcb123456789/p/11348772.html
Copyright © 2020-2023  润新知