Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_DEPRECATE
- #include <stdio.h>
- #include <iostream>
- #include <string>
- #include <string.h>
- #include <vector>
- #include <set>
- #include <map>
- #include <memory.h>
- #include <algorithm>
- #include <math.h>
- #include <queue>
- using namespace std;
- typedef long long li;
- typedef long double ld;
- #define mp make_pair
- #define pb push_back
- typedef pair <li, li> pi;
- typedef vector <li, li> vli;
- typedef vector <int> vi;
- void solve ();
- int main ()
- {
- #ifdef _DEBUG
- freopen ("in.txt", "r", stdin);
- //freopen ("out.txt", "w", stdout);
- #endif
- int t=1;
- while (t--)
- solve ();
- }
- #define int li
- int n;
- int kuda;
- int gr[100500];
- int doing ( int k )
- {
- if ( gr[k]!=-1 )
- return gr[k];
- int now=2*k;
- vector <int> del;
- for ( int i=2; i*i<=now; i++ )
- if ( now%i==0 )
- {
- del.pb (i);
- if ( i*i!=now )
- del.pb (now/i);
- }
- sort (del.begin(), del.end());
- int num=0;
- int ans=0;
- for ( int i=0; i<del.size(); i++ )
- {
- int curans=1;
- int h=now/del[i];
- if ( h>=del[i]+1 && (h-del[i]-1)%2==0 )
- {
- int z=h-del[i]-1; z/=2;
- if (k==n)
- cout<<z<<' '<<del[i]<<endl;
- for ( int j=1; j<=del[i]; j++ )
- {
- int cur=doing(z+j);
- curans^=cur;
- //cout<<z+j<<' '<<cur<<endl;
- }
- if ( curans>ans )
- {
- ans=curans;
- //cout<<k<<' '<<curans<<endl;
- num=del[i];
- break;
- }
- }
- }
- gr[k]=ans;
- if ( k==n && ans==1 )
- kuda=num;
- return ans;
- }
- void solve ()
- {
- cin>>n;
- memset (gr, -1, sizeof (gr));
- for ( int i=1; i<=n; i=i<<1 )
- gr[i]=0;
- int answer=doing (n);
- if ( answer )
- cout<<kuda;
- else
- cout<<"-1";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement