【Question】
A sequence of l integers b1, b2, …, bl (1 ≤ b1 ≤ b2 ≤ … ≤ bl ≤ n) is called good if each number divides (without a remainder) by the next number in the sequence. More formally for all i (1 ≤ i ≤ l - 1).
Given n and k find the number of good sequences of length k. As the answer can be rather large print it modulo 1000000007 (109 + 7).【Input】
The first line of input contains two space-separated integers n, k (1 ≤ n, k ≤ 2000).
【Output】
Output a single integer — the number of good sequences of length k modulo 1000000007 (109 + 7).
【Examples】
Input1
3 2
Output1
5
Input2
6 4
Output2
39
Input3
2 1
Output3
2
【Note】
In the first sample the good sequences are: [1, 1], [2, 2], [3, 3], [1, 2], [1, 3].
【思路】
题意是找串中满足有n个1的所有子串个数
设数组ap[i][j]为长度为i结尾为j的个数,看代码叭,有注释
【源代码】
#include<iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define MOD 1000000007
int dp[3000][3000];
int main(){
int n,k;
cin >> n >> k;
for (int i=0;i<=n;i++) //初始化,长度为1,方法量为1
dp[1][i] = 1;
for (int i=1;i<k;i++) //遍历序列长度
for (int j=1;j<= n;j++) //以j结尾
for (int m=j;m<=n;m+=j) //找结尾是j倍数的把dp[i][j]加上
dp[i+1][m] = (dp[i+1][m]+dp[i][j])%MOD;
long long ans = 0;
for (int i=1; i<= n;i++)
ans=(ans+dp[k][i])%MOD;
cout << ans << endl;
return 0;
}