积性函数
常见积性函数
线性筛求常见积性函数
设 为积性函数
, 设 为最小素因子
由积性函数性质,
若 , 即 为素数幂的形式
设则由积性函数自身的性质而定,例如:
在线性筛中计算出 的最小素因子 与 的最小素因子的最高次幂 可完成上述递推
常见积性函数 - 题目 - Daimayuan Online Judge
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;
typedef long long ll;
typedef unsigned int uint;
const int N = 2e7 + 10;
uint n, a, b, cnt;
uint pr[N/5], p[N], pe[N], d[N], sigma[N], phi[N], mu[N];
void get_primes(int n)
{
p[1] = 1;
for (int i = 2; i <= n; i++)
{
if (!p[i])
{
p[i] = i;
pr[++cnt] = i;
pe[i] = i;
}
for (int j = 1; j <= cnt && pr[j] <= n / i; j++)
{
p[i*pr[j]] = pr[j];
if (p[i] == pr[j])
{
pe[i*pr[j]] = pe[i] * pr[j];
break;
}
pe[i*pr[j]] = pr[j];
}
}
}
void presolve(int n)
{
d[1] = sigma[1] = phi[1] = mu[1] = 1;
for (int i = 2; i <= n; i++)
{
if (pe[i] != i)
{
d[i] = d[i/pe[i]] * d[pe[i]];
sigma[i] = sigma[i/pe[i]] * sigma[pe[i]];
phi[i] = phi[i/pe[i]] * phi[pe[i]];
mu[i] = mu[i/pe[i]] * mu[pe[i]];
}
else
{
d[i] = d[i/p[i]] + 1;
sigma[i] = sigma[i/p[i]] + i;
phi[i] = i / p[i] * (p[i] - 1);
mu[i] = (i == p[i] ? -1 : 0);
}
}
}
int main()
{
ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
cin >> n >> a >> b;
get_primes(n);
presolve(n);
uint d_sum = 0, sigma_sum = 0, phi_sum = 0, mu_sum = 0;
for (int i = 1; i <= n; i++)
{
d_sum ^= a * i * d[i] + b;
sigma_sum ^= a * i * sigma[i] + b;
phi_sum ^= a * i * phi[i] + b;
mu_sum ^= a * i * mu[i] + b;
}
cout << d_sum << endl;
cout << sigma_sum << endl;
cout << phi_sum << endl;
cout << mu_sum << endl;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!