/* 构造 n个点的无向图,无重边自环边数e也是质数点的度数也是质数 */ #include bits/stdc++.h #include vector using namespace std; #define N 100005 int prime[N],m; bool vis[N]; void init(){ for ( int i= 2 ;iN;i++ ){ i
/* 构造 n个点的无向图,无重边自环 边数e也是质数 点的度数也是质数 */ #include<bits/stdc++.h> #include<vector> using namespace std; #define N 100005 int prime[N],m; bool vis[N]; void init(){ for(int i=2;i<N;i++){ if(!vis[i])prime[++m]=i; for(int j=1;j<=m;j++){ if(i*prime[j]>=N)break; vis[i*prime[j]]=1; if(i%prime[j]==0)break; } } } int n; vector<pair<int,int> >ans; int main(){ init(); cin>>n; for(int i=1;i<n;i++) ans.push_back(make_pair(i,i+1)); ans.push_back(make_pair(n,1)); int u=1,e=ans.size(); while(vis[e]){ ans.push_back(make_pair(u,n/2+u)); ++u;++e; } cout<<ans.size()<<"\n"; for(auto p:ans){ cout<<p.first<<" "<<p.second<<‘\n‘; } }