算法总结

一欧拉函数(Euler's totient function)

欧拉函数的定义:

在数论中,对于正整数N,少于或等于N ([1,N]),且与N互质的正整数(包括1)的个数,记作φ(n)。

φ函数的值:

φ(x)=x(1-1/p(1))(1-1/p(2))(1-1/p(3))(1-1/p(4))…..(1-1/p(n)) 其中p(1),p(2)…p(n)为x

的所有质因数;x是正整数; φ(1)=1(唯一和1互质的数,且小于等于1)。注意:每种质因数只有一个。

例如:

φ(10)=10×(1-1/2)×(1-1/5)=4;

1 3 7 9

φ(30)=30×(1-1/2)×(1-1/3)×(1-1/5)=8;

φ(49)=49×(1-1/7)=42;

欧拉函数的性质:

(1)   p^k型欧拉函数:

若N是质数p(即N=p), φ(n)= φ(p)=p-p^(k-1)=p-1。

若N是质数p的k次幂(即N=p^k),φ(n)=p^k-p^(k-1)=(p-1)p^(k-1)。

(2)mn型欧拉函数

设n为正整数,以φ(n)表示不超过n且与n互素的正整数的个数,称为n的欧拉函数值。若m,n互质,φ(mn)=(m-1)(n-1)=φ(m)φ(n)。

(3)特殊性质:

若n为奇数时,φ(2n)=φ(n)。

对于任何两个互质 的正整数a,n(n>2)有:a^φ(n)=1 mod n (恒等于)此公式即 欧拉定理

当n=p 且 a与素数p互质(即:gcd(a,p)=1)则上式有: a^(p-1)=1 mod n (恒等于)此公式即 费马小定理

欧拉函数相关的证明:

(1)   p^k型的欧拉函数的证明:

对于给定的一个素数p: φ(p)=p-1 那么容易证明φ(n)=p^k-p^(k-1)

已知少于或等于p^k的正整数的个数为p^k-1,其中和p^k不互质的正整数有{ p×1,p×2,...,p×(p^(k-1)-1)},共计p^(k-1)-1个

故: φ(n) = p^k-1-(p^(k-1)-1)=p^k-p^(k-1)。

(2)   mn型的欧拉函数的证明:

因为:x=mn m与n互质(即:gcd(m,n)=1);根据中国剩余定理Z(x)和Z(m)×Z(n)之间存在一一映射,所以x的完全余数集(见下面参考)中的元素的个数Z(x)等于Z(m)×Z(n)元素的个数;而Z(m)×Z(n)= φ(m)φ(n)

故有: φ(mn) =φ(m)φ(n) 成立。

(3)任意正整数的欧拉函数的相关证明:

任意一个整数n都可以表示为其质因子的乘积:

n=(p(1)*k(1)) *(p(2)*k(2)) *(p(3)*k(3))…(p(i)*k(i))*…*(p(I)*k(I)) 其中I为n 的质因子的个数。

根据(1)(2)的结论,很容易得出它的欧拉函数为:

φ(n)=n(1-1/p(1))(1-1/p(2))(1-1/p(3))(1-1/p(4))…..(1-1/p(i)) 其中I为n 的质因子的个数。

对于任意n>2,2|φ(n) 必定存在 p(i)-1是偶数

欧拉定理的相关证明:

(1)  令Z(n)={ X(1),X(2),…,X(φ(n)) }  S={ a*X(1) mod n, a*X(2) mod n ,…,a*X(φ(n)) mod n },则 Z(n)=S。

1)因为a与n互质(即:gcd(a,n)=1), X(i)(1≤i≤φ(n))与n互质(即:gcd(X(i),n)=1);所以

a*X(i)与n互质(即:gcd(a*X(i),n)=1),故 a*X(i) mod n ∈ Z(n)。

2)若i≠j,那么 X(i)≠X(j) ,又有a与n互质(即:gcd(a,n)==1),则可得出: a*(X(i)) mod n ≠a*X(j) mod n (消去定律)。

(2)   a^(φ(n))*X(1)*X(2)*X(3)*…*X(φ(n)) mod n

=(a*X(1))*(a*X(2))*(a*X(3))*…*(a*X(φ(n))) mod n

=(a*X(1) mod n)*(a*X(2) mod n)*(a*X(3) mod n)*…*(a*X(φ(n)) mod n) mod n

=X(1)*X(2)*X(3)*…*X(φ(n)) mod n。

对比等式左右两端,因为X(i)(1≤i≤φ(n))与n互质(即:gcd(X(i),n)==1) ,

故: a^φ(n)=1 mod n (恒等于)成立。

费马小定理的相关证明:

若正整数 a与素数p互质,则有a^(p-1)=1 mod n(恒等于)

由于φ(p)=p-1 且 a^φ(n)=1 mod n ,又有此处的p==n;

故:a^(p-1)=1 mod n成立。

此定理可以用来简化幂的模运算:

例如: 计算 7^222的个位数,实际上是求7^222被10除的余数。

且7与10互质,φ(10)=1,由欧拉定理知7^4= 1mod 10

故7^222=(7^4)^55*(7^2)=>(1^55)*(7^2)=>49=>9 mod 10

欧拉函数的延伸:

于或等于n的数中,与n互质的数的总和为:φ(x) * x / 2  (n>1)。

相关知识参考:

完全余数集合:

定义小于 n 且和 n 互质的数构成的集合为 Z(n) ,称呼这个集合为 n 的完全余数集合。 显然 |Z(n)| =φ(n) 。

同余定理:

如果 a mod b = c 则有(a+kb) mod b =c(k为非0整数)

如果 a mod b = c 则有(ka) mod b =kc (k为正整数)

(a+b) mod c =((a mod c)+(b mod c )) mod c;

(a*b) mod c=((a mod c)*(b mod c)) mod c

欧拉函数模板

(1)直接求小于或等于n,且与n互质的个数:

int Euler(int n)

{

int ret=n;

for(int i=2;i<=sqrt(n);i++)

if(n%i==0)

{

ret=ret/i*(i-1);//先进行除法防止溢出(ret=ret*(1-1/p(i)))

while(n%i==0)

n/=i;

}

if(n>1)

ret=ret/n*(n-1);

return ret;

}

筛选模板:求[1,n]之间每个数的质因数的个数

#define size 1000001

int euler[size];

void Init()

{

memset(euler,0,sizeof(euler));

euler[1]=1;

for(int i=2;i<size;i++)

if(!euler[i])

for(int j=i;j<size;j+=i)

{

if(!euler[j])

euler[j]=j;

euler[j]=euler[j]/i*(i-1);//先进行除法是为了防止中间数据的溢出

}

}

代码:

/*#include<stdio.h>
#include<math.h>
int main(){int N,ans;while(~scanf("%d",&N)){ans=N;for(int i=2;i<=sqrt(N);i++)if(N%i==0){ans=ans/i*(i-1);while(N%i==0)N/=i;}if(N>1)ans=ans/N*(N-1);printf("%d\n",ans);}return 0;
}
*/
#include<stdio.h>
#include<string.h>
const int MAXN=1000010;
int dp[MAXN];
int main()
{memset(dp,0,sizeof(dp));dp[1]=1;for(int i=2;i<MAXN;i++){if(dp[i]) continue;for(int j=i;j<MAXN;j+=i){if(!dp[j]) dp[j]=j;dp[j]=dp[j]/i*(i-1);}}int N;while(~scanf("%d",&N)) printf("%d\n",dp[N]);return 0;
}
​​​​​​​ 人一我百!人十我万!永不放弃~~~怀着自信的心,去追逐梦想。

一欧拉函数(Euler‘s totient function)相关推荐

  1. 欧拉函数 euler

    O - 找新朋友 1.欧拉函数 euler() 在数论,对正整数n,欧拉函数是  少于或等于n的数中与n 互质 的数的数目. 互质:公约数只有 1 的两个整数,称为互质整数.即 最大的公约数也就是 1 ...

  2. C++实现欧拉的totient 函数(Euler’s totient function)(附完整源码)

    C++实现欧拉的totient 函数 C++Adaline实现欧拉的totient 函数算法完整源码(定义,实现,main函数测试) C++Adaline实现欧拉的totient 函数算法完整源码(定 ...

  3. 欧拉函数和莫比乌斯反演(Mobius)

    这几天研究了之前一直困扰自己很久的莫比乌斯反演,虽然自己现在学的还不是很好,就简简单单的写一下总结吧,咦,都没学会掌握我就写总结好像很欠揍,欧拉函数现在也系统的整理一下好了 一.欧拉函数 1.定义:* ...

  4. 【欧拉函数】 欧拉函数计算及打表

    文章目录 一.欧拉函数简介 二.欧拉函数计算 三.欧拉函数值打表 四.练手题目 一.欧拉函数简介 在数论中,对正整数n,欧拉函数是小于或等于n的正整数中与n互质的数的数目(因此φ(1)=1).此函数以 ...

  5. XTU OJ 1355 Euler‘s Totient Function(欧拉函数)

    XTU OJ 1355 Euler's Totient Function(欧拉函数) 题目描述 对于整数n,定义ϕ(n)ϕ(n)ϕ(n)为小于或等于n,并与n互质的整数的个数,比如6,比它小的和它互质 ...

  6. HDU6322 Problem D. Euler Function【欧拉函数+数学规律】

    Problem D. Euler Function Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 524288/524288 K (Java ...

  7. (hdu step 7.2.1)The Euler function(欧拉函数模板题——求phi[a]到phi[b]的和)

    题目: The Euler function Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...

  8. UVA10990 Another New Function【欧拉函数打表】

    The depth of phi value of a number is denoted by the number of steps required before it reaches 1. A ...

  9. hdu5597GTW likes function+欧拉函数

    Problem Description Now you are given two definitions as follows. f(x)=∑xk=0(−1)k22x−2kCk2x−k+1,f0(x ...

最新文章

  1. Redis 面试连环炮,看看你能撑到哪一步?
  2. mysql访问oracle数据_python访问Oracle及Mysql数据库
  3. 2018python好找工作吗-2018年为什么要学习Python?Python还有前景吗?
  4. 尝试读取或写入受保护的内存 这通常指示_CPU到底有多快?内存:是我的250倍...
  5. 华为数据之道_DT|华为数据之道,怕你学不会,这次干脆出了本书
  6. 【dfs+理解题意+构造】【待重做】codeforces E. Ice cream coloring
  7. java实现画笔的画圆与矩形功能_JAVA怎么画出一个任意大小的圆形和矩形
  8. mysql/mariadb 安装开启spinx引擎
  9. 计算机软件工程职业道德论文,软件工程职业道德论文_软件工程_软件工程就业前景...
  10. 计算机概论读后感,电子商务概论读后感.doc
  11. 数据科学与大数据技术专业毕业设计选题
  12. iptables使用limit控制新建连接速率
  13. 计算机组成原理江爱文,计算机组成原理
  14. python 文件和文件夹操作
  15. pythonsplit怎么使用_如何在Python中使用Split命令?
  16. c++中malloc和new对比
  17. 儿童场景英语品牌“麦禾教育”完成天使轮融资,清科资管领投
  18. 博士学位真的那么重要吗?上交大博士亲述科研心路,获 4 万高赞,网友:这是知乎最好的回答...
  19. 9.0版本SoundPool播放无声问题
  20. Docker【从入门到服务器搭建备份迁移】详细教程

热门文章

  1. java推算日期后天_分别用C++和Java写的计算后天的日期code
  2. Unity 角色朝向目标 / 动态转向动画
  3. 刚买的新树莓派怎样用(树莓派新手入门)
  4. Python 解决execjs._exceptions.ProgramError: ReferenceError: document is not defined报错问题
  5. 玩转Openwrt(二) — 配合Android手机打造无线音乐播放器
  6. 数据分析之统计知识总结
  7. 数据流—DataStreamAPI
  8. 逻辑回归logistic原理(python代码实现)
  9. Rust 中的指针:Box、Rc、Cell、RefCell
  10. 一篇文章带你了解网络编程(总结)