fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. long long n,dem,x;
  4. long long a[101];
  5. long long res=1;
  6. #define ll long long
  7. #define mod 1000000007
  8. void pr(long x)
  9. {
  10. for (long i=2;i*i<=x;i++)
  11. {
  12. if (x%i==0)
  13. {
  14. a[++dem]=i;
  15. }
  16. while (x%i==0)
  17. {
  18. x/=i;
  19. }
  20. }
  21. if (x!=1)
  22. {
  23. a[++dem]=x;
  24. }
  25. }
  26. long long mu(long long a, long long b) {
  27. if (!b)
  28. return 1;
  29. int c = mu(a, b / 2);
  30. c = (1LL * c * c) % mod;
  31. if (b % 2)
  32. c = (1LL * c * a) % mod;
  33. return c;
  34. }
  35. void tinh(long long k)
  36. {
  37. long long v=k;
  38. while (k<=n)
  39. {
  40. long long c=k*v;
  41. res=(res)*(mu(k,(n/k)-(n/c)));
  42. res%=mod;
  43. if (k>(1e18/v)) return ;
  44. k*=v;
  45. }
  46. }
  47. void xuli()
  48. {
  49. pr(x);
  50. for (long i=1;i<=dem;i++)
  51. {
  52. tinh(a[i]);
  53. }
  54. cout << (res)%mod ;
  55. }
  56. int main()
  57. {
  58. // freopen("in.inp","r",stdin);
  59. // freopen("out.out","w",stdout);
  60. cin >> x >> n ;
  61. xuli();
  62. /// cout << mu(x,n);
  63. return 0;
  64. }
  65.  
Success #stdin #stdout 0s 4256KB
stdin
20190929 1605
stdout
363165664