hkshakib

Untitled

Mar 17th, 2020
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.90 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const long long mod = 1e9+7;
  4. bool isPrime(long long n)
  5. {
  6. if (n <= 1)
  7. return false;
  8. if (n <= 3)
  9. return true;
  10. if (n % 2 == 0 || n % 3 == 0)
  11. return false;
  12. for (long long i = 5; i * i <= n; i = i + 6)
  13. if (n % i == 0 || n % (i + 2) == 0)
  14. return false;
  15. return true;
  16. }
  17. long long solve(long long n)
  18. {
  19. long long cnt=0;
  20. for (long long i = 2; i < n; i++)
  21. {
  22. if (isPrime(i))
  23. cnt++;
  24. }
  25. return cnt;
  26. }
  27. long long phi(long long n)
  28. {
  29. long long res = n;
  30. for (long long i = 2; i * i < n; ++i)
  31. {
  32. if (n % i == 0)
  33. {
  34. while (n % i == 0)
  35. {
  36. n /= i;
  37. }
  38. res -= res / i;
  39. }
  40. }
  41. if (n != 1)
  42. {
  43. res -= res / n;
  44. }
  45. return res;
  46. }
  47.  
  48. long long largestPower(long long n, long long p)
  49. {
  50. long long x = 0;
  51. while (n) {
  52. n /= p;
  53. x += n;
  54. }
  55. return x;
  56. }
  57. long long power(long long x, long long y)
  58. {
  59. long long res = 1;
  60. x = x % mod;
  61. while (y > 0) {
  62. if (y & 1)
  63. res = (res * x) % mod;
  64. y = y >> 1;
  65. x = (x * x) % mod;
  66. }
  67. return res;
  68. }
  69.  
  70. long long modFact(long long n)
  71. {
  72. if (n >= mod)
  73. return 0;
  74. long long res = 1;
  75. bool isPrime[n + 1];
  76. memset(isPrime, 1, sizeof(isPrime));
  77. for (long long i = 2; i * i <= n; i++) {
  78. if (isPrime[i]) {
  79. for (long long j = 2 * i; j <= n; j += i)
  80. isPrime[j] = 0;
  81. }
  82. }
  83. for (long long i = 2; i <= n; i++) {
  84. if (isPrime[i]) {
  85. long long k = largestPower(n, i);
  86.  
  87. res = (res * power(i, k)) % mod;
  88. }
  89. }
  90. return res;
  91. }
  92. int main()
  93. {
  94. long long t;
  95. cin>>t;
  96. while(t--)
  97. {
  98. long long n;
  99. cin>>n;
  100. long long h = phi(n);
  101. long long kk = solve(n);
  102. long long pp = modFact(kk);
  103. cout<<power(h,pp)<<endl;
  104. }
  105. }
Advertisement
Add Comment
Please, Sign In to add comment