414B


  Posted on 13 Dec 2014
dynamic programming combinatorics

Solution


#include <cstdio>
using namespace std;

const int MAX_N = 2020;
const int MAX_M = 2020;
const int MOD = int(1e9) + 7;

int n, m;
int f[MAX_M][MAX_N];

int main()
{
	//input
	scanf("%d%d", &n, &m);

	//work
	f[0][1] = 1;
	for (int i = 0; i <= m; i++)
	{
		for (int j = 1; j <= n; j++)
		{
			for (int k = j; k <= n; k += j)
			{
				f[i + 1][k] = (f[i][j] + f[i + 1][k]) % MOD;
			}
		}
	}
	int ans = 0;
	for (int i = 1; i <= n; i++)
	{
		ans = (ans + f[m][i]) % MOD;
	}
	printf("%d\n", ans);
	return 0;
}