题目大意#
设数根函数为 d(n),求 [1,n] 内 d(ab)=d(c) 但 ab=c 的元素有多少个。
设
ai=j=1∑n[d(j)=i]
故答案为
ans=i=1∑nj=1∑nad(ij)−[ij⩽n]=i=0∑8j=0∑8aiajad(ij)−i=1∑n⌊in⌋
除了整除分块的 O(n) 外,复杂度 O(9)。
int main() {
int n;
std::cin >> n;
V<int> a(9);
for (int i = 0; i < 9; i++) {
a[i] = n / 9 + (i <= n % 9);
}
a[0]--;
ll ans = 0;
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
ans += 1ll * a[i] * a[j] * a[i * j % 9];
}
}
for (int l = 1, r; l <= n; l = r + 1) {
r = n / (n / l);
ans -= 1ll * (r - l + 1) * (n / l);
}
std::cout << ans;
return 0;
}
全部代码请看:Codeforces/other/10C.cpp。