Problem:
Score : 600 points

Problem Statement

Find the number of sequences of length K consisting of positive integers such that the product of any two adjacent elements is at most N, modulo 10^9+7.

Constraints

1\leq N\leq 10^9

1 2\leq K\leq 100 (fixed at 21:33 JST)

N and K are integers.

Input

Input is given from Standard Input in the following format:

N K

Output

Print the number of sequences, modulo 10^9+7.

Sample Input 1

3 2

Sample Output 1

5

(1,1), (1,2), (1,3), (2,1), and (3,1) satisfy the condition.

Sample Input 2

10 3

Sample Output 2

147

Sample Input 3

314159265 35

Sample Output 3

457397712

Solution in Rust (1.15.1) (judge verdict: Accepted)

use std::io::{self, BufRead};
use std::mem::swap;

const M: usize = 1000000007;

fn lower_bound<T: Ord>(vec: &[T], val: T) -> usize {
  let mut lo = 0;
  let mut hi = vec.len();
  while hi - lo > 0 {
    let p = (hi + lo) / 2;
    if vec[p] < val {
      lo = p + 1;
    } else {
      hi = p;
    }
  }
  return lo;
}

fn create_div_floor(n: usize) -> Vec<usize> {
  let mut divfloor: Vec<usize> = Vec::new();
  let mut i: usize = 1;
  while i * i <= n {
    divfloor.push(i);
    i += 1;
  }
  let j = divfloor.len();
  for i in (0..j) {
    let k = n / divfloor[j-i-1];
    if *(divfloor.last().unwrap()) != k {
      divfloor.push(k);
    }
  }
  divfloor
}

fn main() {
  let stdin = io::stdin();
  let mut lines = stdin.lock().lines();
  let xs: Vec<usize> = lines.next().unwrap().unwrap().split(' ').map(|x| x.parse().unwrap()).collect();
  let (n, k) = (xs[0], xs[1]);
  let df = create_div_floor(n);
  let mut counts = df.clone();
  for l in 0..(k-1) {
    let mut temp = vec![0; df.len()];
    temp[0] = counts[df.len()-1];
    for i in 1..df.len() {
      let j = df.len() - i - 1;
      let k = df[i] - df[i-1];
      temp[i] = (temp[i-1] + (k * counts[j] % M)) % M;
    }
    swap(&mut counts, &mut temp);
  }
  println!("{}", counts[df.len()-1]);
}