本题说了增量只考虑正的,所以不用-j*j
这题有问题,探查时间的循环和我存的时候的循环次数不一致。随便看看。
#include<bits/stdc++.h>
using namespace std;
int ms,n,m;
int isp(int x){
if(x<2) return 0;
for(int i=2;i<=(int)sqrt(x)+1;i++){
if(x%i==0)
return 0;
}
return 1;
}
int change(int x){
while(!isp(x)) x++;
return x;
}
int main(){
cin>>ms>>n>>m;
ms=change(ms);
vector<int> v(ms);
for(int i=0;i<n;i++){
int x;
cin>>x;
int f=1;
for(int j=0;j<ms;j++){
if(v[(x+j*j)%ms]==0){
v[(x+j*j)%ms]=x;
f=0;
break;
}
}
if(f)
printf("%d cannot be inserted.\n",x);
}
int sum=0;
for(int i=0;i<m;i++){
int x;
cin>>x;
for(int j=0;j<=ms;j++){ //就这,我上面是<但是这里必须是<=,理解不了,应该有问题。
sum++;
if(v[(x+j*j)%ms]==x||!v[(x+j*j)%ms])
break;
}
}
printf("%.1lf",sum*1.0/m);
return 0;
}