Advertisement
Guest User

Untitled

a guest
Jun 8th, 2015
458
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.96 KB | None | 0 0
  1. #include <iostream>
  2. #include <iomanip>
  3. #include <sstream>
  4. #include <string>
  5. #include <vector>
  6. #include <queue>
  7. #include <stack>
  8. #include <list>
  9. #include <map>
  10. #include <set>
  11. #include <numeric>
  12. #include <algorithm>
  13. #include <complex>
  14. #include <limits>
  15. #include <cmath>
  16. #include <cstring>
  17. #include <cstdlib>
  18.  
  19. using namespace std;
  20.  
  21. int main()
  22. {
  23.     const long long mod = 1000000007;
  24.  
  25.     long long n;
  26.  
  27.     cin >> n;
  28.  
  29.     if (n == 1)
  30.     {
  31.         cout << 0 << " " << 1 << endl;
  32.         return 0;
  33.     }
  34.  
  35.     if (n == 2)
  36.     {
  37.         cout << 1 << " " << 1 << endl;
  38.         return 0;
  39.     }
  40.  
  41.     if (n == 3)
  42.     {
  43.         cout << 1 << " " << 1 << endl;
  44.         return 0;
  45.     }
  46.  
  47.     if (n == 4)
  48.     {
  49.         cout << 1 << " " << 6 << endl;
  50.         return 0;
  51.     }
  52.  
  53.     if (n % 2 == 0)
  54.     {
  55.         long long s = (long long)sqrt(n + 1);
  56.         long long r = 1;
  57.         if (s * s == n + 1)
  58.         {
  59.             for (long long i = 2; i <= n; ++i)
  60.                 if (i != s)
  61.                     r = (r * i) % mod;
  62.             for (long long i = 0; i < n / 2; ++i)
  63.                 r = (r * 2) % mod;
  64.         }
  65.         else
  66.         {
  67.             long long p = n / 2;
  68.             for (long long i = 2; i <= n; ++i)
  69.             {
  70.                 long long j = i;
  71.                 while(j % 2 == 0 && p > 0)
  72.                 {
  73.                     j /= 2;
  74.                     --p;
  75.                 }
  76.                 r = (r * j) % mod;
  77.             }
  78.         }
  79.         cout << 1 << " " << r << endl;
  80.         return 0;
  81.     }
  82.  
  83.     long long s = (long long)sqrt((n + 1) / 2);
  84.     if (s * s == (n + 1) / 2)
  85.     {
  86.         long long r = 1;
  87.         for (long long i = 2; i <= n; ++i)
  88.             if (i != s)
  89.                 r = (r * i) % mod;
  90.         for (long long i = 0; i < n / 2; ++i)
  91.             r = (r * 2) % mod;
  92.         cout << 1 << " " << r << endl;
  93.         return 0;
  94.     }
  95.  
  96.     cout << 1 << " " << 1 << endl;
  97.     return 0;
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement