数论讨伐!欧拉函数!

【欧拉函数】

任务开始。

  • 什么是欧拉函数?我们又怎么求呢???
  • 此次任务的主要怪物:欧拉函数

(1)欧拉函数定义

欧拉函数嘛,当然是我们著名的莱昂哈德·欧拉发明的啦~那么他是怎么定义介个函数滴?

咳咳,对正整数n,欧拉函数是小于n的正整数中与n互质的数的数目(φ(1)=1)

啊?这就完了?好像挺简单的啊。。。

但是不要小瞧他,看过上一篇讨伐的各位可能还记得这样一张图:

当时是不是对它一知半解有点懵?现在我们来认真的导一下,彻底学习~

(2)欧拉函数性质

1.φ(n)=n-1   当且仅当n为质数

这这这,这不废话吗,n要是质数的话小于n的数里面不都跟它互质吗!过过过过过

2.φ(pa)=pa-pa-1   p为质数

em...这个稍微有点意思了。对于pa而言,与它不互质的数必然含有因子p,说白了就是所有p的倍数都不与它互质

而这些数的数量就是(pa)/p=pa-1,然后再一减,就有了这个式子!下一个~!

3.φ(n*m)=φ(n)*φ(m)   当gcd(n,m)=1时

难度逐渐上升了呢,这个证明比较复杂。务必参考这个

不过我在这里会进一步的解释,你准备好这场惊心动魄的狩猎了吗?

首先我们列个矩阵:

可见这里我们拿出了所有n*m以内的数,每个数都可以表示为k*m+r,其中k为第几行(从0开始),r为第几列(从1开始)

接下来明确我们要求的:phi(n*m)

想要让一个数与n*m互质,只要满足其与n互质,又满足与m互质即可(设gcd(a,n)=1且gcd(a,m)=1。首先因为n与m互质,所以将n与m分别拆分质因数

,你会发现他们没有共同的质因子,而mn的质因子就为他们两个质因子的合集。如果a与n互质,那么他与n没有共同的质因子,同理与m也没有共同的

质因子,所以把a与mn放在一起,你理所应当的发现他们没有共同的质因子,即gcd(a,mn)=1)

所以求解就变成了所有即与n互质又与m互质的数

由于 GCD(km+r, m)=GCD(r, m)(记得辗转相除法吗?),所以每一列的 n 个元素同时与 m 互素当且仅当 GCD(r,m)=1,

因此与 m 互素的列共有phi(m)列。

假定第 r 列元素满足 GCD(r,m)=1. 则该列的所有元素为

而我们需要验证的是,这些数中有phi(n)个数是与n互质的

首先我们要知道这些数组成了一个mod n的完全剩余系。

什么是完全剩余系呢?就是说有n-1个数,这些数除n的余数两两不相同,就说这些数构成了模n完全剩余系。

怎么证明这一点呢?

设其中的两个数分别为r+am,r+bm(0<=a,b<n),假设a!=b,同时他们除n的余数相同,这就不是完全剩余系。这个条件写为:(r+am)%n==(r+bm)%n

所以[(r+am)%n]-[(r+bm)%n]==0,根据模运算,这么写也可以:

[(r+am)-(r+bm)]%n==0

所以[(a-b)m]%n==0

要想让这个式子成立,只有以下两种可能:

  1. a-b==0,但是因为a!=b,所以不成立。
  2. (a-b)m是n的倍数,因为gcd(m,n)=1,所以(a-b)==kn(k>=1),但是因为0<=a,b<n,所以仍然不成立

综上所述,假设不成立,所以这些数构成了模n完全剩余系

根据gcd(r+km,n)==gcd((r+km)%n,n),问题就转化成了[1,n-1]有多少与n互质的数(0肯定不行),没错就是我们一直梦寐以求的phi(n)!

在这mn个数中,有phi(m)列与m互质,这些列中又各自有phi(n)个数与n互质,

综上所述!phi(m*n)=phi(m)*phi(n)!(当且仅当gcd(m,n)=1)

4.φ(n)=n*∏1-1/p 其中p是n的质因子

这一条可以翻译成这样:

其中p1到pj为x所有的质因子

证明:拆n->p1a1*p2a2*......*pjaj

用第3条变成:phi(n)=phi(p1a1)*phi(p2a2)*...*phi(pjaj)

再用第2条变成:p1a1*p2a2*...*pjaj*(1-p1-1)*(1-p2-1)*...*(1-pj-1)

化简得证~~

5.φ(2*n)=φ(n) 当n是奇数时

因为n为奇数,所以由 n到2n的变化中增加了质因子”2“,根据第四条可以变成:

φ(2*n)=φ(n)*2*(1-1/2)=φ(n),得证

6.φ(n) mod 2=0 当n>2时

由于第5条,我们只需要证明n为奇数或为2^a(a>1)时成立即可

  1. n=2^a(a>1),所以phi(n)=2a-2a-1=2a-1*(2-1)为偶数
  2. n为奇数,则n拆分后必有奇质因数,而pa与pa-1都为奇数,所以pa-pa-1必为偶数

综上,得证

(哎我去切了半天刀都钝了了TAT赶快磨下)

【砥石】入手!

有了这些素材性质做武器工具,我们就能更好的讨伐欧拉函数啦!让我们进入正题吧!

(3)欧拉函数计算

算法1:线性筛

这个线性筛你们一定眼熟,不眼熟赶快去看!在这里不讲了

时间代价:O(n)

缺点:处理大范围数据是比较憋手

优点:能求出范围内所有的欧拉函数值还附赠素数表~~

原文地址:https://www.cnblogs.com/2017SSY/p/8494247.html

时间: 2024-08-03 11:44:34

数论讨伐!欧拉函数!的相关文章

hihoCoder 1298 : 数论五&#183;欧拉函数

#1298 : 数论五·欧拉函数 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho有时候会用密码写信来互相联系,他们用了一个很大的数当做密钥.小Hi和小Ho约定了一个区间[L,R],每次小Hi和小Ho会选择其中的一个数作为密钥. 小Hi:小Ho,这次我们选[L,R]中的一个数K. 小Ho:恩,小Hi,这个K是多少啊? 小Hi:这个K嘛,不如这一次小Ho你自己想办法算一算怎么样?我这次选择的K满足这样一个条件: 假设φ(n)表示1..n-1中与n互质的数

数论五&#183;欧拉函数

#1298 : 数论五·欧拉函数 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho有时候会用密码写信来互相联系,他们用了一个很大的数当做密钥.小Hi和小Ho约定了一个区间[L,R],每次小Hi和小Ho会选择其中的一个数作为密钥. 小Hi:小Ho,这次我们选[L,R]中的一个数K. 小Ho:恩,小Hi,这个K是多少啊? 小Hi:这个K嘛,不如这一次小Ho你自己想办法算一算怎么样?我这次选择的K满足这样一个条件: 假设φ(n)表示1..n-1中与n互质的数

hihoCoder 数论五&#183;欧拉函数

题目1 : 数论五·欧拉函数 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho有时候会用密码写信来互相联系,他们用了一个很大的数当做密钥.小Hi和小Ho约定了一个区间[L,R],每次小Hi和小Ho会选择其中的一个数作为密钥. 小Hi:小Ho,这次我们选[L,R]中的一个数K. 小Ho:恩,小Hi,这个K是多少啊? 小Hi:这个K嘛,不如这一次小Ho你自己想办法算一算怎么样?我这次选择的K满足这样一个条件: 假设φ(n)表示1..n-1中与n互质的数的个

「POJ3696」The Luckiest number【数论,欧拉函数】

# 题解 一道数论欧拉函数和欧拉定理的入门好题. 虽然我提交的时候POJ炸掉了,但是在hdu里面A掉了,应该是一样的吧. 首先我们需要求的这个数一定可以表示成\(\frac{(10^x-1)}{9}\times 8\). 那么可以列出一个下面的方程 \[\frac{(10^x-1)}{9}\times 8=L\times k\] 设\(d=gcd(9L,8)=gcd(L,8)\) \[\frac89(10^x-1)=Lk\] \[\frac{8(10^x-1)}d=\frac{9Lk}{d}\]

【SGU】SGU每日练1&#183;Coprimes【数论】欧拉函数

先介绍欧拉函数及其相关定理吧: 1.欧拉函数:对于任意一个数X,将其分解质因数为X=(P1^b1)*(P2^b2)*(P3^b3)...... 则小于X的与X互质的数的个数N为N = X * (1 - 1 / p1) * (1 - 1 / p2)....... 显然对于质数p,Euler(p) = p - 1: 2.一个数的所有质因子之和是euler(n)*n/2: 3.a^Euler(n) % n = 1,这里可以用模运算来证明: 具体实现: 1.先筛素数 2.从2开始遍历素数,能整除则乘,然

[BZOJ2818] Gcd (数论,欧拉函数,线性筛)

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2818 必须用线性筛. 1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long LL; 4 const int maxn = 10001001; 5 LL phi[maxn], sum[maxn], n; 6 bool isprime[maxn]; 7 LL prime[maxn]; 8 int tot;

数论8——欧拉函数

欧拉函数,用φ(n)表示 欧拉函数是求小于等于n的数中与n互质的数的数目 辣么,怎么求哩?~(-o ̄▽ ̄)-o 可以先在1到n-1中找到与n不互质的数,然后把他们减掉 比如φ(12) 把12质因数分解,12=2*2*3,其实就是得到了2和3两个质因数 然后把2的倍数和3的倍数都删掉 2的倍数:2,4,6,8,10,12 3的倍数:3,6,9,12 本来想直接用12 - 12/2 - 12/3 但是6和12重复减了 所以还要把即是2的倍数又是3的倍数的数加回来 (>﹏<) 所以这样写12 - 1

【数论】欧拉函数

欧拉函数φ      欧拉定理是用来阐述素数模下,指数同余的性质.      欧拉定理:对于正整数N,代表小于等于N的与N互质的数的个数,记作φ(N)      例如φ(8)=4,因为与8互质且小于等于8的正整数有4个,它们是:1,3,5,7     欧拉定理还有几个引理,具体如下:     ①:如果n为某一个素数p,则φ(p)=p-1;     ①很好证明:因为素数p的质因数只有1和它本身,p和p不为互质,所以φ(p)=p-1:     ②:如果n为某一个素数p的幂次,那么φ(p^a)=(p-

CF1114F Please, another Queries on Array?(线段树,数论,欧拉函数,状态压缩)

这题我在考场上也是想出了正解的……但是没调出来. 题目链接:CF原网 题目大意:给一个长度为 $n$ 的序列 $a$,$q$ 个操作:区间乘 $x$,求区间乘积的欧拉函数模 $10^9+7$ 的值. $1\le n\le 4\times 10^5,1\le q\le 2\times 10^5,1\le a_i,x\le 300$.时限 5.5s,空限 256MB. 明显线段树. 有一个想法是维护区间积的欧拉函数,但是这样时间复杂度和代码复杂度都很高…… 我的做法是维护区间积.而欧拉函数,就是看看

hdoj 1286 找新朋友 【数论之欧拉函数】

找新朋友 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 7912    Accepted Submission(s): 4157 Problem Description 新年快到了,"猪头帮协会"准备搞一个聚会,已经知道现有会员N人,把会员从1到N编号,其中会长的号码是N号,凡是和会长是老朋友的,那么该会员的号码肯定和N有大