rt,我在前面的帖子上面看到了 __int128 不能当下标。然后测试了一下。
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
#define ll __int128
ll inline read(){
ll num=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){num=(num<<3)+(num<<1)+(ch^48);ch=getchar();}
return num*f;
}
void _print(ll x){if(x>=10)_print(x/10);putchar(x%10+'0');}
void print(ll x,char s=' '){if(x<0)putchar('-'),x=-x;_print(x);putchar(s);}
ll tot;
ll p[N],minD[N];bool vis[N];
void init(ll t){
vis[1]=1;
for(int i=2;i<=t;i++){
if(!vis[i])p[++tot]=i,minD[i]=i;
for(int j=1;i*p[j]<=t;j++){
vis[i*p[j]]=1;
minD[i*p[j]]=p[j];
if(i%p[j]==0)break;
}
}
}
ll n,m,mod;
int main(){
n=read();m=read();mod=read();init(mod);
p[++tot]=(int)1;print(p[tot]);
return 0;
}
这个程序调用 init() 的时候会 RE。然而下面也有一个 p[++tot]=(int)1;,只写这个时不会错。把 tot 改成 long long 也不会错。
不懂,求解。