算法随笔——数论之莫比乌斯反演
前置知识:
数论分块
可以求形如:
原理如下:
比如说求
得到:10 5 3 2 2 1 1 1 1 1
可以发现有一些块的数值是一样的。
具体一点可以发现
又因为这样的值只有
int sum(int n)
{
int res = 0;
for (int i = 1,r;i <= n;i = r + 1)
{
r = n/(n/i);
res += ...//计算贡献
}
return res;
}
狄利克雷卷积
一些数论函数:
点击查看代码
int get_euler(int n)
{
phi[1] = 1;
for (int i = 2;i <= n;i++)
{
if (!vis[i])
{
prime[cnt++] = i;
phi[i] = i - 1;
}
for (int j = 0;prime[j]<= n/i;j++)
{
vis[prime[j] * i] = 1;
if (i % prime[j] == 0)
{
phi[i*prime[j]] = phi[i] * prime[j];
break;
}
phi[prime[j] * i] = phi[i] * (prime[j]-1);
}
}
return res;
}
莫比乌斯函数
筛法:
点击查看代码
void euler(int n)
{
mu[1] = 1;
for (int i = 2;i <= n;i++)
{
if (!vis[i]) primes[cnt++] = i,mu[i] = -1;
for (int j = 0;primes[j] <= n / i;j++)
{
int num = i * primes[j];
vis[num] = 1;
if (i % primes[j] == 0)
{
mu[num] = 0;
break;
}
mu[num] = -mu[i];
}
}
}
狄利克雷卷积
则有:
同时可以发现狄利克雷卷积满足交换律、分配律和结合律。
例题1
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现