有史以來最毒瘤的一次之Hankson的趣味題。。。
阿新 • • 發佈:2018-12-08
我先寫一篇部落格發表一下我的情感
一道數論題,我寫了整整四天,刷了整整四頁半提交記錄,還把正確率刷到了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