如何评价MAXN正常写1e8得了82分,把MAXN改成6e7竟然AC,k没有1e16的卡人数据
#include<bits/stdc++.h>
#define int long long
#define re register
const int mod=1e9+7;
const int MAXN=6e7+1;
using namespace std;
int zs[6000000];
bool a[MAXN];
int tt,k;
void prime(){
tt=1;
for(re int i=3;i<MAXN;i+=2)
{
if(a[i]==0)
{
zs[++tt]=i;
for(re int q=i*3;q<MAXN;q+=i*2)
{
a[q]=1;
}
}
}
}
int ksm(int x,int y)
{
int ans=1;
while(y>0)
{
if(y&1)
{
ans*=x;
ans%=mod;
}
x*=x;
x%=mod;
y>>=1;
}
return ans;
}
signed main()
{
// freopen("C.in","r",stdin);
// freopen("C.out","w",stdout);
int t;
scanf("%lld",&t);
zs[1]=2;
prime();
while(t--)
{
int p,q,ans=1,sum=0;
scanf("%lld%lld%lld",&k,&p,&q);
ans*=(q-p+1);
ans%=mod;
int g=sqrt(k);
for(re int i=1;i<=tt&&zs[i]<=g;i++)
{
// printf("%lld\n",zs[i]);
if(k%zs[i]==0)
{
sum++;
while(k%zs[i]==0)
{
k/=zs[i];
}
}
}
if(k>1) sum++;
ans*=ksm(2,sum);
ans%=mod;
printf("%lld\n",ans);
}
}