rt. 70pts,求优化 gcd 算法,怀疑是它的问题,会用的卡常技巧都用上了
#include<bits/stdc++.h>
#define gcd __gcd
using namespace std;
const int N=1e5+10;
int n,m;
bool a[N];
int read(){
int x=0,w=1;
char ch=0;
while (ch<'0'||ch>'9') {
if(ch=='-') w=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9') {
x=x*10+(ch-'0');
ch=getchar();
}
return x*w;
}
inline void write(int x) {
static int sta[35];
int top=0;
do{
sta[top++]=x%10,x/=10;
}while(x);
while(top){
putchar(sta[--top]+48);
}
}
int main(){
memset(a,false,sizeof(a));
n=read(),m=read();
while(m--){
char c;
int x;
cin>>c;
x=read();
if(c=='+'){
bool con=false;
if(a[x]==true){
cout<<"Already on"<<endl;
continue;
}
for(int i=1;i<=n;i++){
if(gcd(i,x)!=1&&a[i]==true){
printf("Conflict with %d\n",i);
con=true;
break;
}
}
if(con==false){
printf("Success\n");
a[x]=true;
}
}else if(c=='-'){
if(a[x]==false){
printf("Already off\n");
}else{
printf("Success\n");
a[x]=false;
}
}
}
return 0;
}