原题解链接:https://ac.nowcoder.com/discuss/149984
其实本来所有的手办是的中文翻译的
设为整除的的有序对数
为
有了这个求和就简单了
另对于我们需要求的就是三元组的个数
那么求的就是的对数
我们可以先求对的三元组计数,那么只要枚举到三次根下就好了,从剩下的中枚举得到
这样保证了最后乘上全排列就ok了
对于它的全排列只有个
所以枚举的不能重复,对于有两个数相同的全排列只有个,也要去重。
#include<bits/stdc++.h>
using namespace std;
#define LL long long
using namespace std;
const int mod = 2333;
LL n,ans,tmp;
int main() {
cin >> n;
for(LL a = 1,v; a * a <= (v = n / a);++ a,++ ans)
for(LL b = a + 1;b * b <= v;++ b)
tmp += n / (a * b) - b;
ans += tmp * 6;
tmp = 0;
for(LL a=1,v;(v = a * a) <= n;++ a) {
tmp += n / v;
if(a * a <= n / a) tmp --;
}
ans += tmp*3;
cout << ans % mod;
return 0;
}