欧拉函数&欧拉定理
欧拉定理其实就是这么一句话:
然后欧拉函数
性质:
1.积性函数:
即
从这个定义和组合意义上来说,
因为和
对于积性函数
这是定义的逆用
2.
3.若
如果一个数和n不互质,那么p为两者最大公约数的约数,反之显然。
所以我们只需要找到
单个数的求法:
考虑把p分解质因数,然后用性质三可以知道每个
根据积性函数的性质,
蓝书上还有一个公式可以直接用
点击查看代码
int euler_phi(int n) {
int m = int(sqrt(n + 0.5));
int ans = n;
for (int i = 2; i <= m; i++)
if (n % i == 0) {
ans = ans / i * (i - 1);
while (n % i == 0) n /= i;
}
if (n > 1) ans = ans / n * (n - 1);
return ans;
}
如果涉及到一堆数,建议使用线性筛,主要使用性质一:
点击查看代码
// C++ Version
void pre() {
memset(is_prime, 1, sizeof(is_prime));
int cnt = 0;
is_prime[1] = 0;
phi[1] = 1;
for (int i = 2; i <= 5000000; i++) {
if (is_prime[i]) {
prime[++cnt] = i;
phi[i] = i - 1;
}
for (int j = 1; j <= cnt && i * prime[j] <= 5000000; j++) {
is_prime[i * prime[j]] = 0;
if (i % prime[j])
phi[i * prime[j]] = phi[i] * phi[prime[j]];
else {
phi[i * prime[j]] = phi[i] * prime[j];
break;
}
}
}
}
低于线性的积性函数求法不在
但是也不是不学
顺便说一句,见到积性函数求一堆值想线性筛
~~别tmd再拿个埃筛硬干被卡内存痛失
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具