欧拉函数——数学知识(c++)

article/2025/11/10 18:59:01

定义:欧拉函数表示1-N中与N互质的数的个数;
给定一个数n,求在[1,n]这个范围内两两互质的数的个数
对于这个范围内的每一个数,我们只要找到不超过这个数且与这个数互质的数的个数就可以了
欧拉函数用希腊字母φ表示,φ(N)表示N的欧拉函数.
在这里插入图片描述

欧拉函数的简单性质

1.欧拉函数是积性函数(非完全);

积性函数:对于任意互质的整数a和b有性质f(ab)=f(a)f(b)的数论函数。完全积性函数:对于任意整数a和b有性质f(ab)=f(a)f(b)的数论函数。

2.除了N=2,φ(N)都是偶数;

3.当N为奇数时,φ(2*N)=φ(N);

4.若N是质数p的k次幂,φ(N)=pk-p(k-1)=(p-1)p^(k-1) 因为除了p的倍数之外,其他数都与N互质;

5.当N是质数时,φ(N)=N-1;

若将N表示成质因子分解式
在这里插入图片描述
在这里插入图片描述
所以我们有
6.φ(N)=N*(1-1/P1)(1-1/P2)…*(1-1/Pn).

求n的欧拉值

首先, 欧拉函数是一个积性函数,当m,n互质时,φ(mn)=φ(m)∗φ(n)
根据唯一分解定理知 n=p1a1∗p2a2∗…∗pxax
因此 φ(n)=φ(p1a1)∗…∗φ(pxax)

对于任意一项 φ(psas)=psas−ps(as−1)
从定义出发 φ(psas)等于小于或等于psas的正整数中与psas互质的数的数目

从1到psas中共有psas个数字

其中与psas不互质的有ps,2ps,…,psas−1∗ps,共psas−1

所以 φ(psas) = psas - psas−1=psas∗(1−1/ps)
因此

φ(n)=φ(p1^a1^)∗…∗φ(px^ax^)
=(p1^a1^−p1^a1−1^)∗…∗(px^ax^−px^ax−1^)
=p1^a1^(11/p1)∗p2^a2^∗(11/p2)∗…∗px^ax^∗(11/px)
=p1^a1^∗p2^a2^∗…∗px^ax^(11/p1)∗(11/p2)∗…∗(11/px)
=n∗∏i=1x(11/pi)
作者:Sundae
链接:https://www.acwing.com/solution/content/8702/
来源:AcWing

经典例题

AcWing 873. 欧拉函数
给定n个正整数ai,请你求出每个数的欧拉函数。

欧拉函数的定义
1 ~ N 中与 N 互质的数的个数被称为欧拉函数,记为ϕ(N)。
若在算数基本定理中,N=p1a1p2a2…pmam,则:
ϕ(N) = N∗p1−1/p1 ∗ p2−1/p2 ∗ … ∗ pm−1/pm
输入格式
第一行包含整数n。

接下来n行,每行包含一个正整数ai。

输出格式
输出共n行,每行输出一个正整数ai的欧拉函数。

数据范围
1≤n≤100,
1≤ai≤2∗109
输入样例:

3
3
6
8

输出样例:

2
2
4
#include <iostream>using namespace std;int phi(int x)//一次性函数
{int res = x;for (int i = 2; i <= x / i; i ++ )if (x % i == 0)//只有x%i=0才会进{res = res / i * (i - 1);while (x % i == 0) x /= i;//一次性消除全部i}if (x > 1) res = res / x * (x - 1);//有没有遗漏return res;
}int main()
{int n;cin >> n;while (n -- ){int x;cin >> x;cout << phi(x) << endl;}return 0;
}

AcWing 874. 筛法求欧拉函数
质数ii的欧拉函数即为phi[i] = i - 1:1 ~ i−1均与i互质,共i−1个。

phi[primes[j] * i]分为两种情况:
① i % primes[j] == 0时:primes[j]是i的最小质因子,也是primes[j] * i的最小质因子,因此1 - 1 / primes[j]这一项在phi[i]中计算过了,只需将基数NN修正为primes[j]倍,最终结果为phi[i] * primes[j]。
② i % primes[j] != 0:primes[j]不是i的质因子,只是primes[j] * i的最小质因子,因此不仅需要将基数NN修正为primes[j]倍,还需要补上1 - 1 / primes[j]这一项,因此最终结果phi[i] * (primes[j] - 1)。
作者:番茄酱
链接:https://www.acwing.com/solution/content/3952/
来源:AcWing
#include <iostream>using namespace std;typedef long long LL;const int N = 1000010;int primes[N], cnt;
int euler[N];
bool st[N];void get_eulers(int n)
{euler[1] = 1;for (int i = 2; i <= n; i ++ ){if (!st[i]){primes[cnt ++ ] = i;euler[i] = i - 1;  //1到p-1都和p互质}for (int j = 0; primes[j] <= n / i; j ++ ){int t = primes[j] * i;st[t] = true;if (i % primes[j] == 0)//p[j]*i的所有质因子都出现在i的所有质因子当中{euler[t] = euler[i] * primes[j];//比i的所有质因子多了一个p[j]break;}euler[t] = euler[i] * (primes[j] - 1);}}
}int main()
{int n;cin >> n;get_eulers(n);LL res = 0;for (int i = 1; i <= n; i ++ ) res += euler[i];cout << res << endl;return 0;
}

http://chatgpt.dhexx.cn/article/TnrJ713j.shtml

相关文章

欧拉函数(Euler_Function)

一、基本概述 在数论&#xff0c;对正整数n&#xff0c;欧拉函数varphi(n)是少于或等于n的数中与n互质的数的数目。此函数以其首名研究者欧拉命名&#xff0c;它又称为Eulers totient function、φ函数、欧拉商数等。 二、计算公式 三、基本性质 欧拉函数用希腊字母φ表示,φ…

欧拉函数最全总结

文章目录 欧拉函数的内容一、欧拉函数的引入二、欧拉函数的定义三、欧拉函数的性质四、欧拉函数的计算方法&#xff08;一&#xff09;素数分解法&#xff08;二&#xff09;编程思维1.求n以内的所有素数2.求φ(n)3.格式化输出0-100欧拉函数表&#xff08;“x?”代表十位数&am…

什么是时间复杂度

什么是算法 算法可以理解就是一系列被控制的步骤&#xff0c;你通过按序执行这些步骤可以实现一些目标或者产生一些输出。 时间复杂度 时间复杂度是一个函数,它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数.时间复杂度常用大O表述表述&#xff0c…

算法的时间复杂度和空间复杂度详解

通常&#xff0c;对于一个给定的算法&#xff0c;我们要做 两项分析。第一是从数学上证明算法的正确性&#xff0c;这一步主要用到形式化证明的方法及相关推理模式&#xff0c;如循环不变式、数学归纳法等。而在证明算法是正确的基础上&#xff0c;第二部就是分析算法的时间复杂…

一文详解时间复杂度

一文详解时间复杂度&#xff0c;从里到外清晰认识 1. 什么是时间复杂度2. 关于大O3. 不同数据规模的差异4. 复杂表达式的化简5. O ( l o g n ) O(logn) O(logn)中的 l o g log log是以什么为底&#xff1f;举一个例子 总结 1. 什么是时间复杂度 时间复杂度是一个函数&#xff…

时间复杂度分析

该节知识点引用机械工业出版社数据结构和算法分析第2章内容 以及极客时间数据结构和算法部分知识点 时间复杂度基础分析 算法执行时间分析 时间复杂度分析更多的是对要编写的代码进行一个事前预估分析的一个过程&#xff0c;通过事前大致分析出算法执行的时间和所需要的空间…

算法时间复杂度

在 算法基础 中&#xff0c;我们简单介绍了什么是算法、对算法的要求&#xff0c;以及说了评断算法效率的两大类方法。今天我们将重点介绍衡量算法效率的一个概念——时间复杂度。 定义 在进行算法分析的时候&#xff0c;语句的总执行次数 T(n) 是关于问题规模 n&#xff08;输…

java时间复杂度计算_时间复杂度到底怎么算

算法(Algorithm)是指用来操作数据、解决程序问题的一组方法。对于同一个问题&#xff0c;使用不同的算法&#xff0c;也许最终得到的结果是一样的&#xff0c;但在过程中消耗的资源和时间却会有很大的区别。 那么我们应该如何去衡量不同算法之间的优劣呢&#xff1f; 主要还是从…

Python 时间复杂度计算

一、时间复杂度 1 常见的时间复杂度 #常量阶O(1)# 对数阶O(logn)# 线性对数阶O(nlogn)# 线性阶O(n)# 平方阶,立方阶....M次方阶O(n^2),O(n^3),O(n^m)# 指数阶O(2^n)# 阶乘阶O(n!) 算法的时间复杂度对比&#xff1a; O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n2lo…

树的时间复杂度

时间复杂度是一个函数&#xff0c;它定量描述了该算法的运行时间。常见的时间复杂度有以下几种。 1&#xff0c;log(2)n&#xff0c;n&#xff0c;n log(2)n &#xff0c;n的平方&#xff0c;n的三次方&#xff0c;2的n次方&#xff0c;n! 1指的是常数。即&#xff0c;无论算法…

时间复杂度和空间复杂度详解

算法时间复杂度和空间复杂度 1.算法效率 算法效率分析分为两种&#xff1a;第一种是时间效率&#xff0c;第二种是空间效率。时间效率被称为时间复杂度&#xff0c;而空间效率被称作空间复杂度。 时间复杂度主要衡量的是一个算法的运行速度&#xff0c;而空间复杂度主要衡量一…

全排列的时间复杂度

我们在高中的时候都学过排列组合。“如何把 n 个数据的所有排列都找出来”&#xff0c;这就是全排列的问题。我来举个例子。比如&#xff0c;1&#xff0c;2&#xff0c;3 这样 3 个数据&#xff0c;有下面这几种不同的排列&#xff1a; 1, 2, 3 1, 3, 2 2, 1, 3 2, 3, 1 3, 1…

十分钟搞定时间复杂度(算法的时间复杂度)

目录 1、什么是时间复杂度&#xff1f; 2、时间复杂度的计算 &#xff08;1&#xff09;单个循环体的推导法则 &#xff08;2&#xff09;多重循环体的推导法则 &#xff08;3&#xff09;多个时间复杂度的推导法则 &#xff08;4&#xff09;条件语句的推导法则 3、习题…

时间复杂度

时间频率 一个算法执行所耗费的时间&#xff0c;从理论上是不能算出来的&#xff0c;必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试&#xff0c;只需知道哪个算法花费的时间多&#xff0c;哪个算法花费的时间少就可以了。并且一个算法花费的时间与算…

什么是时间复杂度?

时间复杂度&#xff08;Time complexity&#xff09;是一个函数&#xff0c;它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数. 时间复杂度常用大O表述&#xff0c;不包括这个函数的低阶项和首项系数。 常见的时间复杂度 常见的算法时间复杂度由小到大…

数据结构—1.时间复杂度

目录 前言 一、时间复杂度 二、大O表示法 三&#xff0c;实例介绍 例1&#xff1a;O(N^2) 例2&#xff1a;O&#xff08;1&#xff09; 例3&#xff1a;O(M N) &#xff08;重点&#xff09;例4&#xff1a;O&#xff08;N&#xff09; 例5&#xff1a;冒泡排序&#…

时间复杂度计算-例题集合

一、常数阶二、线性阶三、对数阶四、平方阶五、多个复杂度组合&#xff1a;顺序结构六、多个复杂度组合&#xff1a;选择结构七、多个复杂结构&#xff1a;嵌套结构八、递归 ) 一、常数阶 // 常数阶 int result 100; //运行程序只执行一次 result ; //执行一次System.out…

时间复杂度详解

目录 一. 时间复杂度概念 例题1: 二. 推导大O阶 三. 几种常见的时间复杂度: 3.1常数阶: 3.2线性阶: 例题2: 3.3对数阶 3.4 平方阶: ​编辑 例题3:​编辑 解题思路: 变式1: 3.5 总结 四、空间复杂度 4.1 空间复杂度O(1) 4.2空间复杂度O(n) 例题4&#xff1a;数字…

一套图 搞懂“时间复杂度”

写在前面&#xff1a; 这篇文章是在公众号&#xff1a; 程序员小灰 中发布的。是我到目前为止所看到的关于时间复杂度介绍的最好的文章&#xff0c;清晰明了。 所以拿来po出来 仅供学习交流&#xff0c;如侵则删。 现已将此文收录至&#xff1a; 《数据结构》C语言版 (清华严…

各位学弟学妹,别再看教材了,时间复杂度看这篇就好了

时间复杂度是学习算法的基石&#xff0c;今天我们来聊聊为什么要引入时间复杂度&#xff0c;什么是时间复杂度以及如何去算一个算法的时间复杂度 一、刻画算法的运行时间 某日&#xff0c;慧能叫来了一尘打算给他补习补习一下基础知识&#xff0c;只见克写了一段非常简单的代码…