facsum (线性筛 积性函数)

博客介绍了如何利用线性筛解决积性函数facsum的问题。通过分析式子的结构,利用积性的性质,将问题转化为计算特定形式的函数值。在处理if(i % prime[j] == 0)的情况时,通过考虑f[p^k]的计算方式,得出f[p^k] = p^k^m * (k - kp + 1)。文中提到,对于空间有限的情况,避免开过多辅助数组是关键。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

facsum

10.20

思路:
对于式子进行分析,前面的Phi就是一个很常规的转化,变成i^m。后边一个约数个数,一个Mobius,一个单位函数都是积性函数,所以卷起来也就积性啦(不是积性怎么做嘛。。)
于是就上线性筛了。
对于 if(i % prime[j] == 0) 的情况,也就是 f[p^k*c] = f[p^k] * f[c]。
所以我们只用考虑 f[p^k] 如何计算,d就是p^i,当 (i <= k-2) 是,n/d 中就会有多个p,那么mu自然就是0了,不必计算。
所以 f[p^k] = p^k^m * (g[p^k] * mu[1] * 1 + g[p^(k-1)] * mu[p] * p) = p^k^m * (k + 1 + k * (-p))
= p^k^m * (k - kp + 1)。结束
话说打表找规律也不失为一种很好的方法。

ps:空间限定比较严,那些又开mu又开phi什么的就只有唱歌啦啦啦。

#include <cstdio>
#include <cstring>
#include <algorithm>
#define LL long long
#define N 10000010
#define MOD 1000000007
using namesp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值