Advertisement
Guest User

Untitled

a guest
Jul 20th, 2019
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.21 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int n ;
  4. int notPrime[2005];
  5. void sieve(){
  6.     for(int i=4;i<=2000;i+=2)notPrime[i]=1;
  7.     for(int i=3;i<=2000;i+=2){
  8.         if(notPrime[i])continue;
  9.         for(int j=i+i;j<=2000;j+=i){
  10.             notPrime[j]=1;
  11.         }
  12.     }
  13. }
  14. int adj[1003][1003];
  15. vector<pair<int,int> > edge;
  16. int deg[1003];
  17. void moreEdge(){
  18.     for(int i=1;i<=n;i++){
  19.         if(deg[i]==3)continue;
  20.         assert(deg[i]==2);
  21.         for(int j=i+1;j<=n;j++){
  22.             if(deg[j]==3)continue;
  23.             assert(deg[j]==2);
  24.             if(adj[i][j]||adj[j][i])continue;
  25.             edge.push_back({i,j});
  26.             deg[i]++;
  27.             deg[j]++;
  28.             break;
  29.         }
  30.         if(notPrime[edge.size()]==0)return ;
  31.     }
  32.     assert(false);
  33. }
  34. int main(){
  35.     sieve();
  36.     cin>>n;
  37.     for(int i=1;i<n;i++){
  38.         adj[i][i+1]=1;
  39.         adj[i+1][i]=1;
  40.         deg[i]=2;
  41.         edge.push_back({i,i+1});
  42.     }
  43.  
  44.     adj[n][1]=1;
  45.     adj[1][n]=1;
  46.     deg[n]=2;
  47.     edge.push_back({n,1});
  48.  
  49.  
  50.     if(notPrime[edge.size()])moreEdge();
  51.  
  52.     cout << edge.size() << endl;
  53.     for(auto e:edge){
  54.         printf("%d %d\n",e.first,e.second);
  55.     }
  56.  
  57.  
  58.     return 0;
  59.  
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement