我先写一篇博客发表一下我的情感
一道数论题,我写了整整四天,刷了整整四页半提交记录,还把正确率刷到了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