long long mod = 1000000007;

int main()
{
	long long t, k;
	cin >> t >> k;
	vector<int> a(t);
	vector<int> b(t);
	int bmax = 0;
	for (int i = 0; i < t; ++i)
	{
		cin >> a[i] >> b[i];
		bmax = max(bmax, b[i]);
	}
	vector<long long> buf(bmax + 1);
	vector<long long> sum(bmax + 1, 0);
	for (int i = 0; i < k&&i <= bmax; ++i)
		buf[i] = 1;
	for (int i = k; i <= bmax; ++i)
		buf[i] = (buf[i - 1] + buf[i - k]) % mod;
	for (int i = 1; i <= bmax; ++i)
		sum[i] = (buf[i] + sum[i - 1]) % mod;
	for (int i = 0; i < t; ++i)
		cout << (sum[b[i]] - sum[a[i] - 1] + mod) % mod << endl;
	return 0;
}
第五题代码,DP就可以了,注意最后数值溢出的问题;