Advertisement
Guest User

Untitled

a guest
Jun 28th, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.70 KB | None | 0 0
  1. #include <cstdio>
  2. #include <vector>
  3. using namespace std;
  4. vector <long long> pierwsze;
  5. vector <long long> antypierwsze;
  6. bool bylo[100003];
  7. long long Z;
  8.  
  9. void erastotenes()
  10. {
  11.      for(int i=2; i<=100000; i++)
  12.      {
  13.              if(bylo[i]==false)
  14.              pierwsze.push_back(i);
  15.              int x=i;
  16.              while(x<=100000)
  17.              {
  18.                 bylo[x]=true;
  19.                 x+=i;
  20.              }
  21.      }
  22. }
  23.  
  24. long long n,akt,res,m,akt_max;
  25.  
  26. int rozklad(long long x)
  27. {
  28.     long long rozloz=1;
  29.     for(int i=0; x!=1 && i<pierwsze.size(); i++)
  30.     {
  31.             long long temp=0;
  32.             while(x%pierwsze[i]==0)
  33.             {
  34.                 x/=pierwsze[i];
  35.                 temp++;
  36.             }
  37.             rozloz=rozloz*(temp+1);
  38.     }
  39.     if(x>1)
  40.     rozloz*=2;
  41.     return rozloz;
  42. }
  43.  
  44. bool inicjuj()
  45. {
  46.      for(int i=0; i<antypierwsze.size(); i++)
  47.      {
  48.          for(int z=0; z<antypierwsze.size(); z++)
  49.          {
  50.            if(antypierwsze[i]+antypierwsze[z]<=m && antypierwsze[i]+antypierwsze[z]>antypierwsze[antypierwsze.size()-1])
  51.            {
  52.               Z=rozklad(antypierwsze[i]+antypierwsze[z]);
  53.               if(Z>akt_max)
  54.               {
  55.                   antypierwsze.push_back(antypierwsze[i]+antypierwsze[z]);
  56.                   akt_max=Z;
  57.                   return true;
  58.               }
  59.            }
  60.          }
  61.      }  
  62.      return false;
  63. }
  64.  
  65.  
  66. int main()
  67. {
  68.     erastotenes();
  69.     scanf("%lld", &m);
  70.     antypierwsze.push_back(1);
  71.     antypierwsze.push_back(2);
  72.     akt_max=rozklad(2);
  73.     while(inicjuj())
  74.     {}
  75.     if(m==1)
  76.     printf("1\n");
  77.     else
  78.     printf("%d\n", antypierwsze[antypierwsze.size()-1]);
  79.     return 0;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement