浅谈欧拉函数

本文介绍了欧拉函数φ(n)的概念,其表示n与x互质的数的个数,重点讲解了欧拉函数的计算公式,并提供了使用埃氏筛进行高效计算的C++代码示例,指出原始实现的时间复杂度和优化后的线性筛版本。
部署运行你感兴趣的模型镜像


定义:
首先说一下定义吧,φφφ (n) 表示从 nnnxxx 互质的数的个数。其中 x∈[1,n]x \in [1, n]x[1,n]

初始值:φ(n)=nφ (n) = nφ(n)=n

公式:

φ(n)=φ(n)÷x×(x−1)φ (n) = φ (n) \div x \times (x - 1)φ(n)=φ(n)÷x×(x1),其中 xxx 满足是 nnn 的质因数。

代码实现

下面是用埃氏筛实现的欧拉函数,复杂度是 O(n×log⁡log⁡n)O(n \times \log \log n)O(n×loglogn),可以用线性筛优化到 O(n)O(n)O(n)

#include <bits/stdc++.h>
using namespace std;

const int N = 1e5 + 10;
bool st[N];
int phi[N];

int main() {
    ios::sync_with_stdio(false), cin.tie(0);
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        phi[i] = i; // 初始化
    }
    for (int i = 2; i <= n; i++) {
        if (phi[i] == i) { // 素数的情况
            for (int j = i; j <= n; j += i) {
                phi[j] = phi[j] * (i - 1) / i;
            }
        }
    }
    cout << phi[n] << "\n";
    return 0;
}

您可能感兴趣的与本文相关的镜像

Langchain-Chatchat

Langchain-Chatchat

AI应用
Langchain

Langchain-Chatchat 是一个基于 ChatGLM 等大语言模型和 Langchain 应用框架实现的开源项目,旨在构建一个可以离线部署的本地知识库问答系统。它通过检索增强生成 (RAG) 的方法,让用户能够以自然语言与本地文件、数据库或搜索引擎进行交互,并支持多种大模型和向量数据库的集成,以及提供 WebUI 和 API 服务

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值