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 Java8 (OpenJDK 1.8.0) (judge verdict: Accepted)

import java.util.*;
import java.math.*;

public class Main {

    static long MOD = 1000000007;



    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long n = sc.nextLong();
        long k = sc.nextLong();
        HashMap<Long,Boolean> map = new HashMap<>();
        ArrayList<Long> list = new ArrayList<>();
        for(int i = 1; i * i <= n; i++) {
            if(!map.containsKey(i)) {
                map.put((long)i,true);
                list.add((long)i);
            }
            if(!map.containsKey(n / i)) {
                map.put((long)(n/i),true);
                list.add(n/i);
            }
        }
        Collections.sort(list);
        int m = list.size();

        long[][] dp = new long[(int)k+1][m];
        for(int i = 0; i < m; i++) {
            dp[0][i] = 1;
        }

        for (int j = 0;j < (int)k;j++) {
			dp[j+1][m-1]=dp[j][0];
			for (int i = m - 2; i >= 0; i--) {
				dp[j+1][i]= (dp[j+1][i+1] + (list.get(m - i - 1) - list.get(m - i - 2)) * dp[j][m - i - 1]) % MOD;
			}
		}

        System.out.println(dp[(int)k][0]);

    }
}