fork download
  1. #include <bits/stdc++.h>
  2. #define int long long
  3.  
  4. using namespace std;
  5.  
  6. const int MOD = 998244353;
  7. vector<int> prime((int)1e6 + 1, 1);
  8. void solve(){
  9. int n, m;
  10. cin >> n >> m;
  11.  
  12. auto bin = [&](int a, int b, auto && self) -> int {
  13. a %= MOD;
  14. if(b == 0)return 1;
  15. int g = self(a, b / 2, self);
  16. g *= g;
  17. g %= MOD;
  18. if(b % 2)g *= a;
  19. g %= MOD;
  20. return g;
  21. };
  22.  
  23. int ans = 0;
  24. int prev = 1;
  25. for(int i = 1; i <= n; i++){
  26. ans += bin(m, i, bin);
  27. ans %= MOD;
  28. }
  29. int cur = 1;
  30. for(int i = 1; i <= n; i++){
  31. if(prime[i]){
  32. cur *= i;
  33. if(cur > m)break;
  34. }
  35.  
  36. int g = m / cur;
  37. g %= MOD;
  38. prev *= g;
  39. prev %= MOD;
  40. ans -= prev;
  41. if(ans < 0)ans += MOD;
  42. ans %= MOD;
  43.  
  44. }
  45.  
  46. cout << ans << "\n";
  47. }
  48.  
  49. int32_t main(){
  50. ios_base::sync_with_stdio(false);
  51. cin.tie(nullptr);
  52.  
  53. int t = 1;
  54. // cin >> t;
  55.  
  56. for(int i = 2; i <= 1e6; i++){
  57. if(!prime[i])continue;
  58. for(int j = i * i; j <= 1e6; j += i)prime[j] = 0;
  59. }
  60.  
  61. for(int i = 1; i <= t; i++){
  62. solve();
  63. }
  64. return 0;
  65. }
Success #stdin #stdout 0.02s 10964KB
stdin
4 2
stdout
26