搞这个之前需要学习一个简单的知识——整除分块
参考博客链接:https://blog.csdn.net/beautiful_CXW/article/details/83143756
首先它是用于求
举个k为10的例子,看k/i的规律
把k/i为相同数值的放到一块,然后就看得懂板子了
typedef long long ll;
int main() {
ll n,k;
scanf("%lld%lld",&n,&k);
ll ans=0;
for(ll l=1,r;l<=n;l=r+1) {
if(k/l!=0) r=min(k/(k/l),n);
else r=n;
ans+=(k/l)*(r-l+1)*(l+r)/2;
}
printf("%lld",ans);
return 0;
}
如果f(1)=1 且 若x,y互质 f(x*y)=f(x)*f(y) 则成为积性函数
如果不要求x,y互质的话就是完全积性函数
常见积性函数:
1、莫比乌斯函数
质因子个数为k
μ(n)的首25个值:1, −1, −1, 0, −1, 1, −1, 0, 0, 1, −1, 0, −1, 1, 1, 0, −1, 0, −1, 0, 1, 1, −1, 0, 0,
2.欧拉函数 (比n小的与n互质的数的个数)
3.d(n) ~n的因子的个数(约数=因子)
4.~约数和函数
还有一些常用的完全积性函数
1.e(n) 当n为1时值为1 其余情况为0
2.I(n) 恒为1
3.id(n) =n
狄利克雷卷积:
一些常用的狄利克雷卷积:
μ(n)*I=e
μ(n)和I互为逆元函数
明显有
id=n/d 所以可以得到该式子
最后一个也不难推,写出卷积易得。
以上结论都会在杜教筛时使用,或由其推导出需要的式子
还有一个结论:一个数n的所有约数的欧拉函数返回值的和为n
数学公式不会打 好烦啊