111
发现d(x)只有0-9的值
我们可以把按d(x)来分类
发现要只计算
我们就可以枚举d(C)d(a)d(b)贡献就是 这三个任选
要是有前面限制呢 我打了一下表 发现要是AB=C 那么肯定满足后面
这样我们就只用枚举C然后算他有多少对因子即可
然后发现C是1-n 连续的 可以直接枚举因子A 就可以快速算出有多少对
void solve(){
int n;cin>>n;
vector<int>d[10],D[10];
for(int i=1;i<=81;i++){
int x=i;
while(x>=10){
int now=0;
while(x)now+=x%10,x/=10;
x=now;
}
D[x].push_back(i);
}
vector<int>mp(n+1);
for(int i=1;i<=n;i++){
int x=i;
while(x>=10){
int now=0;
while(x)now+=x%10,x/=10;
x=now;
}
d[x].push_back(i);
mp[i]=x;
}
long long ans=0;
for(int i=1;i<=n;i++){
ans-=n/i;
}
for(int i=0;i<=9;i++){
for(auto j:D[i]){
if(j>81)break;
for(int l=1;l<=9;l++){
if(j%l)continue;
int r=j/l;
if(r>=10)continue;
// cout<<i<<" "<<l<<' '<<r<<endl;
// cout<<(int)d[l].size()*(int)d[r].size()*(int)d[i].size()<<endl;
ans+=(long long)d[l].size()*(long long)d[r].size()*(long long)d[i].size();
}
}
}
cout<<ans<<endl;
}
标签:10,int,Codeforces,while,Beta,枚举,now
From: https://www.cnblogs.com/ycllz/p/17875800.html