有史以来最毒瘤的一次之Hankson的趣味题。。。

版权声明: https://blog.csdn.net/zjh_2017/article/details/79965237

我先写一篇博客发表一下我的情感
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
一道数论题,我写了整整四天,刷了整整四页半提交记录,还把正确率刷到了30%。。。
可恶啊,然而。。。
进阶指南确定没有问题吗。。。
其实我至今不知道它怎么写,只不过是把别人的代码用自己的语言搬过来而已。。。
不行这一题我一定得点差评。。。
而且最牛逼的是除了60分之外,我刷了0分。10分。20分。30分。40分。50分。70分。80分。90分。100分。。。
这是我血的代码:

#include<bits/stdc++.h>
using namespace std;
int n,m,a0,a1,b0,b1,ans,temp,isprime[10010],v[500010];
bool flag;
inline int read()
{
    int num=0,flag=1;
    char c=getchar();
    for (;c<'0'||c>'9';c=getchar())
    if (c=='-') flag=-1;
    for (;c>='0'&&c<='9';c=getchar())
    num=(num<<3)+(num<<1)+c-48;
    return num*flag;
}
void getprime()
{
    for (int i=2;i<=m;++i)
    {
        if (!v[i])
        {
            v[i]=i;
            isprime[++temp]=i;
        }
        for (int j=0;j<=temp;++j)
        {
            if (isprime[j]>v[i]||isprime[j]>m/i) break;
            v[i*isprime[j]]=isprime[j];
        }
    }
}
void cnt(int t)
{
    int ma=0,mb=0,mc=0,md=0,mx=0;
    while (a0%t==0)
    {
        ma++;
        a0/=t;
    }
    while (b0%t==0)
    {
        mb++;
        b0/=t;
    }
    while (a1%t==0)
    {
        mc++;
        a1/=t;
    }
    while (b1%t==0)
    {
        md++;
        b1/=t;
    }
    if (ma==mc&&mb==md&&mc<=md) mx=md-mc+1;
    if (ma>mc&&mb<md&&mc==md) mx=1;
    if (ma>mc&&mb==md&&mc<=md) mx=1;
    if (ma==mc&&mb<md&&md>=mc) mx=1;
    ans*=mx;
    if (ans==0) flag=false;
}
int main()
{
    n=read();
    m=sqrt(2000000000);
    getprime();
    for (int i=1;i<=n;++i)
    {
        flag=true;
        a0=read();
        a1=read();
        b0=read();
        b1=read();
        ans=1;
        for (int j=1;j<=temp;++j)
        {
            if (isprime[j]<=b1) cnt(isprime[j]);
            if (flag==false) break;
        }
        if (a0>1) cnt(a0);
        else if (b1>1&&b1!=a0) cnt(b1);
        printf("%lld\n",ans);
    }
    return 0;
}

0.0根本不知道怎么做GG

猜你喜欢

转载自blog.csdn.net/zjh_2017/article/details/79965237