【数论】欧拉函数
2023-12-22 13:27:49
前置知识:分解质因数
一个数可以被分解为质因数乘积
n =?,其中的pi都是质因数
欧拉函数介绍
朴素法求欧拉函数
思路:边分解质因数边算欧拉函数
void get_primes() {
int n; cin >> n;
int ans = 0;
int res = n;
for (int i = 2; i <= n / i; i++) {
if (n % i == 0) {
res = res / i * (i - 1);
while (n % i == 0) n /= i;
}
}
if (n > 1) res = res / n * (n - 1);
cout << res<<endl;
}
线性筛欧拉函数
在线性筛筛质数的过程中,求出每个数的欧拉函数
可以一次筛的过程中一次性将 [ 1 , N ] 中所有数的欧拉函数都求出来
?
int primes[N], cnt = 0;
int euler[N];
bool st[N];
int get_euler(int n)
{
euler[1] = 1; // 1的欧拉函数值是1
// 线性筛模板 + 过程中求欧拉函数
for (int i = 2; i <= n; i++)
{
if (!st[i])
{
primes[cnt ++] = i;
euler[i] = i - 1; // (1)式
}
for (int j = 0; primes[j] <= n / i; j++)
{
st[i *primes[j]] = true;
if (i % primes[j] == 0)
{
euler[i * primes[j]] = euler[i] * primes[j]; //(2)式
break;
}
euler[i * primes[j]] = euler[i] * (primes[j] - 1);//(3)式
}
}
// 最后,euler数组中存的就是 1 ~ n 每个数的欧拉函数值
}
文章来源:https://blog.csdn.net/clmm_/article/details/135147270
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!