题意&思路
代码
/*
题意简化:
简单排列问题
解题方法:
算法一:递推+前缀和
*/
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
const int mod=5000011;
const int N=100010;
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
ll lcm(ll a,ll b){return a*b/gcd(a,b);}
ll qmi(ll m,ll k, ll p=mod){int res=1%p,t=m;while(k){if(k&1)res=res*t%p;t=t*t%p;k>>=1;}return res;}
ll inv(ll a){return qmi(a,mod-2);}
int n,k;
int f[N],s[N];
int main(){
cin>>n>>k;
f[0]=s[0]=1;
for(int i=1;i<=n;i++){
f[i]=s[max(i-k-1,0)];
s[i]=(s[i-1]+f[i])%mod;
}
cout<<s[n]<<endl;
return 0;
}