func_code_string: #include <bits/stdc++.h>   using namespace std;   using i64 = long long;   using u64 = unsigned long long;   struct debug {     ~debug() { cerr << endl; }     template <class c>     debug& operator<<(c x) {       cerr << x;       return *this;     }     template <class c, class d>     debug& operator<<(pair<c, d> x) {       *this <<  (  << x.first <<  ,   << x.second <<  ) ;       return *this;     }     template <class c>     debug& operator<<(vector<c> x) {       *this <<  [ ;       int f = 0;       for (auto it : x) {         *this << (f ?  ,   :   );         *this << it;         f = 1;       }       *this <<  ] ;       return *this;     }   };   const int MOD = 998244353;   const int N = 5e5;   i64 add(i64 a, i64 b) {     if (a + b >= MOD)       return a + b - MOD;     else       return a + b;   }   i64 mul(i64 a, i64 b) {     i64 c = a * b;     if (c >= MOD) c %= MOD;     return c;   }   vector<i64> fact(N + 5);   vector<i64> inv_fact(N + 5);   i64 mod_inverse(i64 x) {     int p = MOD - 2;     i64 ret = 1;     while (p) {       if (p & 1) {         ret = mul(ret, x);       }       x = mul(x, x);       p /= 2;     }     return ret;   }   i64 nCr(int n, int r) {     if (r > n) return 0;     i64 ret = mul(fact[n], inv_fact[r]);     ret = mul(ret, inv_fact[n - r]);     return ret;   }   int main() {     fact[0] = 1;     inv_fact[0] = mod_inverse(1);     for (int i = 1; i <= N; i++) {       fact[i] = mul(fact[i - 1], i);       inv_fact[i] = mod_inverse(fact[i]);     }     int n, k;     scanf( %d%d , &n, &k);     i64 ans = 0;     for (int i = 1; i <= n; i++) {       ans = add(ans, nCr(n / i - 1, k - 1));     }     printf( %lld n , ans);   }   