func_code_string: #include <bits/stdc++.h>   using namespace std;   template <typename T>   void read(T &x) {     x = 0;     char ch = getchar();     long long f = 1;     while (!isdigit(ch)) {       if (ch ==  - ) f *= -1;       ch = getchar();     }     while (isdigit(ch)) {       x = x * 10 + ch - 48;       ch = getchar();     }     x *= f;   }   template <typename T, typename... Args>   void read(T &first, Args &...args) {     read(first);     read(args...);   }   template <typename T>   void write(T arg) {     T x = arg;     if (x < 0) {       putchar( - );       x = -x;     }     if (x > 9) {       write(x / 10);     }     putchar(x % 10 +  0 );   }   template <typename T, typename... Ts>   void write(T arg, Ts... args) {     write(arg);     if (sizeof...(args) != 0) {       putchar(   );       write(args...);     }   }   const long long MOD = 998244353;   const int MAXN = 5e5 + 50;   long long n, k, fac[MAXN], inv[MAXN];   long long qpow(long long a, long long p) {     long long sum = 1;     while (p) {       if (p & 1) {         sum = sum * a % MOD;       }       a = a * a % MOD;       p >>= 1;     }     return sum;   }   long long get_inv(long long k) { return qpow(k, MOD - 2); }   void pre() {     fac[0] = 1;     for (register int i = 1; i <= n; ++i) {       fac[i] = fac[i - 1] * i % MOD;       inv[i] = get_inv(fac[i]);     }   }   long long C(long long n, long long m) {     if (m > n) {       return 0;     } else {       return fac[n] * get_inv(fac[n - m] * fac[m] % MOD) % MOD;     }   }   int main() {     read(n, k);     pre();     long long ans = 0;     for (register int i = 1; i <= n; ++i) {       long long p = n / i - 1;       ans = (ans + C(p, k - 1)) % MOD;     }     write(ans), putchar(  n );     return 0;   }   