互质与欧拉函数

文章目录互质与欧拉函数1. 算法分析2. 板子3. 例题互质与欧拉函数1. 算法分析基本概念欧拉函数:1~N中与N互质的数的个数在算术基本定理中:N = (p1a1) * (p2a2) * … *(pmam)一个数的欧拉函数: φ(N)=N * (1-1/p1) * (1-1/p2) * … * (1-1/pm)且φ(1) = φ(2) = 1重要结论1~N中,(x, y) = 1的对数为: 前1~N的欧拉函数的前缀和 * 2 - 1常用思路很多求gcd(x, y)=p的问题,最后都需
摘要由CSDN通过智能技术生成

互质与欧拉函数

1. 算法分析

基本概念
欧拉函数:1~N中与N互质的数的个数
在算术基本定理中:N = (p1a1) * (p2a2) * … *(pmam)
一个数的欧拉函数: φ(N)=N * (1-1/p1) * (1-1/p2) * … * (1-1/pm)
且φ(1) = φ(2) = 1

重要结论
1~N中,(x, y) = 1的对数为: 前1~N的欧拉函数的前缀和 * 2 - 1

常用思路
很多求gcd(x, y)=p的问题,最后都需要转化为(x/p, y/p)=1,然后变为求互质的数目,转化为欧拉函数求解

2. 板子

  1. 求N的欧拉函数 O(sqrt(N))
int get_euler(int a) {
   
    long long res = a;  // 存储答案
    for (int i = 2; i <= a / i ;++i) {
     // 求出小于等于sqrt(a)的质数
        if (a % i == 0) {
   
            res = res * (i - 1) / i;  // 欧拉函数公式求答案
            while (a % i == 0) a /= i;
        }
    }
    if (a > 1) res = res * (a - 1) / a;
    return res;
}
  1. 求1~N的欧拉函数和 O(N)
phi[1] = 1;
long long res = 0;
for (int i = 2; i <= n; ++i )   {
     // 求质数
    if (!st[i]) {
     // 没记录就标记这个质数
        prime[cnt++] = i;
        phi[i] = i - 1;  // 质数的欧拉函数为本身减一
    }
    for (int j = 0; prime[j] <= n / i; ++j) {
     // 枚举所有的质数
        st[prime[j] * i] = 1;
        if (i % prime[j] == 0 ) {
     // 如果i能够整除pj
            phi[i * prime[j]] = prime[j] * phi[i];  // phi(i * pj) = pj * phi[i]
            break;
        }
        phi[i * prime
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值