Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <vector>
- using namespace std;
- vector <long long> pierwsze;
- vector <long long> antypierwsze;
- bool bylo[100003];
- long long Z;
- void erastotenes()
- {
- for(int i=2; i<=100000; i++)
- {
- if(bylo[i]==false)
- pierwsze.push_back(i);
- int x=i;
- while(x<=100000)
- {
- bylo[x]=true;
- x+=i;
- }
- }
- }
- long long n,akt,res,m,akt_max;
- int rozklad(long long x)
- {
- long long rozloz=1;
- for(int i=0; x!=1 && i<pierwsze.size(); i++)
- {
- long long temp=0;
- while(x%pierwsze[i]==0)
- {
- x/=pierwsze[i];
- temp++;
- }
- rozloz=rozloz*(temp+1);
- }
- if(x>1)
- rozloz*=2;
- return rozloz;
- }
- bool inicjuj()
- {
- for(int i=0; i<antypierwsze.size(); i++)
- {
- for(int z=0; z<antypierwsze.size(); z++)
- {
- if(antypierwsze[i]+antypierwsze[z]<=m && antypierwsze[i]+antypierwsze[z]>antypierwsze[antypierwsze.size()-1])
- {
- Z=rozklad(antypierwsze[i]+antypierwsze[z]);
- if(Z>akt_max)
- {
- antypierwsze.push_back(antypierwsze[i]+antypierwsze[z]);
- akt_max=Z;
- return true;
- }
- }
- }
- }
- return false;
- }
- int main()
- {
- erastotenes();
- scanf("%lld", &m);
- antypierwsze.push_back(1);
- antypierwsze.push_back(2);
- akt_max=rozklad(2);
- while(inicjuj())
- {}
- if(m==1)
- printf("1\n");
- else
- printf("%d\n", antypierwsze[antypierwsze.size()-1]);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement