码子如下
#include<bits/stdc++.h>
using namespace std;
long long fg,len;
long long mp[22][200][200][2];
string ss;
long long dfs(long long cur,long long x,long long xx,long long f)
{
long long i,v=9;
if(cur==len)
{
long long kkk=(x==0)&&(xx==fg);
if(kkk==1&&fg==2)
long long my=-1;
return (x==0)&&(xx==fg);
}
if(mp[cur][x][xx][f]!=-1)return mp[cur][x][xx][f];
if(f)v=ss[cur]-'0';
long long ret=0;
for(i=0;i<=v;i++)
{
ret+=dfs(cur+1,(x*10+i)%fg,xx+i,f&(i==v));
}
mp[cur][x][xx][f]=ret;
return ret;
}
long long ask(string x)
{
len=x.size();
ss=x;
memset(mp,-1,sizeof(mp));
return dfs(0,0,0,1);
}
long long chk(string x)
{
long long i,aa=0,bb=0;
for(i=0;i<x.size();i++)
aa=aa*10+x[i]-'0',bb+=x[i]-'0';
if(aa%fg==0&&bb==fg)return 1;
else return 0;
}
int main()
{
string A,B;
cin>>A>>B;
long long all=0;
long long i;
for(i=1;i<=180;i++)
{
fg=i;
// long long lsa=ask(B);
// long long lsb=ask(A);
all+=ask(B)-ask(A)+chk(A);
}
cout<<all;
return 0;
}