思路
D(k⋅n)=k⋅D(n)
所以n⋅k不进位
最高位:k9种
其他位:(k9+1)种
对于10m≤n<10m+1
共有k9(k9+1)i种
所以对于10l≤n<10r
共有k9⋅∑i=ln=r−1(k9+1)i种
令S=∑i=ln=r−1(k9+1)i
则k9⋅S=∑i=l+1n=r(k9+1)i
k9⋅S−S=(k9+1)r−(k9+1)l
(k9−1)S=(k9+1)r−(k9+1)l
S=k9−1(k9+1)r−(k9+1)l
共有k9⋅S种
AC CODE
#include<iostream>
using namespace std;
#define int unsigned long long
const int MOD=1e9+7;
int t,L,R,k;
int fast_pow(int x,int n){
int s=1;
for(;n;n>>=1,x=(x*x)%MOD)if(n&1)s=(s*x)%MOD;
return s;
}
signed main(){
cin>>t;
while(t--){
cin>>L>>R>>k;
int p=9/k;
int angs=(((fast_pow(p+1,R-L)-1)%MOD)+MOD)%MOD;
angs=((fast_pow(p+1,L)%MOD)*angs)%MOD;
cout<<angs<<"\n";
}
return 0;
}
有帮助,赞一个