目录

目录地址

上一篇

下一篇

互质

我们定义两个正整数 \(a,b\) ,若 \(a,b\) 的最大公因数为 \(1\)

对这类特殊的数对,我们称呼为互质

即 \(a,b\) 互质 \(\Leftrightarrow gcd(a,b)=1\)

简化剩余类

考虑 \(n\) 的 \(m\) 个剩余类,其中对于所有与 \(n\) 互质的剩余类称为简化剩余类

可以证得,简化剩余类的数量为 \(\displaystyle \sum_{i=1}^n[gcd(i,n)=1]\)

我们从每个剩余类中抽出一个数,分别命名为 \(a_{1\cdots m}\)

易得到 \(\forall 1\leq i\leq m,gcd(a_i,n)=1\)

欧拉函数

欧拉函数 \(\boldsymbol \varphi(n)\) 定义为:小于等于 \(n\) 的正整数中,与 \(n\) 互质的数的个数

我们引入符号 \([condition]\) 为一个值:当 \(condition\) 为真时,值为 \(1\) ;否则为 \(0\)

因此可以这么写: \(\displaystyle \boldsymbol\varphi(n)=\sum_{i=1}^n[gcd(i,n)=1]\)

欧拉函数的性质

首先,根据定义,不难得出 \(\boldsymbol\varphi(1)=1\)

而根据质数的定义,还容易得出 \(\boldsymbol\varphi(p)=p-1,p\in Prime\)

因为所有比它小的数中,只有 \(1\) 是它的因数,其它的都与它互质;而 \(gcd(1,p)=1\)

我们考虑质数的正整数次方:对于质数 \(p\) 的 \(k\) 次方 \(p^k\)

显然:小于等于它的数一共 \(p^k\) 个,只有含有质因数 \(p\) 的数与它不互质,这些数为:

\(p,2p,3p\cdots p^{k-1}\cdot p\) 共 \(p^{k-1}\) 个

故 \(\boldsymbol \varphi(p^k)=p^k-p^{k-1},p\in Prime,k\in Z_+\)

同时还能得到递推式: \(\boldsymbol \varphi(p^{k+1})=p^{k+1}-p^k=p(p^k-p^{k-1})=p\cdot \boldsymbol\varphi(p^k)\)

接下来我们证明欧拉函数的积性性质:

即 \(gcd(M,N)=1\Rightarrow\boldsymbol\varphi(NM)=\boldsymbol \varphi(N)\cdot\boldsymbol\varphi(M)\)

证明:

考虑到 \(N\) 有 \(\boldsymbol\varphi(N)\) 个简化剩余类, \(M\) 有 \(\boldsymbol\varphi(M)\) 个

则设 \(N\) 的简化剩余类中各取一个数,构成集合 \(A\) ; \(M\) 中的构成集合 \(B\)

因此 \(gcd(aM+bN,M)=gcd(bN,M)=gcd(b,M)=1,a\in A,b\in B\)

同理 \(gcd(aM+bN,N)=1\)

考虑到若 \(gcd(a,c)=1,gcd(b,c)=1,gcd(a,b)=1\)

则 \(a,b,c\) 所含的质因数互不相同,因此 \(gcd(ab,c)=1\)

因此,回归到上面:

由于 \(gcd(aM+bN,M)=1,gcd(aM+bN,N)=1,gcd(M,N)=1\)

因此 \(gcd(aM+bN,MN)=1\)

而 \(a\) 一共有 \(\boldsymbol \varphi(N)\) 个不同的取值,每个都满足 \((aM+bN\mod MN)\) 互不相同且 \(gcd(aM+bN,NM)=1\)

\(b\) 一共有 \(\boldsymbol\varphi(M)\) 个不同取值,也满足上式

故根据乘法原理:一共有 \(\boldsymbol\varphi(N)\cdot\boldsymbol\varphi(M)\) 个数使得 \(MN\) 互质

因此 \(\boldsymbol\varphi(NM)=\boldsymbol\varphi(N)\cdot\boldsymbol\varphi(M)\)

欧拉函数的积性性质可以形成新的推论:

\(\displaystyle \boldsymbol\varphi(\prod_{i=1}^mp_i^{c_i})=\prod_{i=1}^m\boldsymbol\varphi(p_i^{c_i})\)

据此可演化出了欧拉函数的求法与筛法

欧拉函数的求法

设 \(\displaystyle n=\prod_{i=1}^mp_i^{c_i}\) 则

\(\displaystyle \boldsymbol\varphi(n)=\prod_{i=1}^m\boldsymbol\varphi(p_i^{c_i})=\prod_{i=1}^m(p_i^{c_i}-p_i^{c_i-1})=(\prod_{i=1}^mp_i^{c_i})\cdot(\prod_{i=1}^m(1-{1\over p_i})\ )\)

代入 \(n\) 的定义得 \(\displaystyle \boldsymbol\varphi(n)=n\prod_{i=1}^m{p_i-1\over p_i}\)

用类似于质因数分解的方法即可 \(O(\sqrt n)\) 求出

sieve(sqrt(n));

int copy=n,ans=1;

for(int i=1;i<=cntprime;i++){

if(copy%prime[i]!=0) continue;

ans*=prime[i]-1;

copy/=prime[i];

while(copy%prime[i]==0){

copy/=prime[i];

ans*=prime[i];

}

}

if(copy!=1) ans*=copy-1;

欧拉函数的筛法

设 \(n\in Z_+,p\in Prime\)

若 \(p^k\mid n,p^{k+1}\nmid n,k\in Z_+\)

则 \(\boldsymbol\varphi(n\times p)=\boldsymbol\varphi({n\over p^k}\times p^k\times p)=\boldsymbol\varphi({n\over p^k})\cdot\boldsymbol\varphi(p^{k+1})=\boldsymbol\varphi({n\over p^k})\times p\cdot\boldsymbol\varphi(p^k)\)

故 \(\boldsymbol\varphi(n\times p)=p\cdot\boldsymbol\varphi(n)\)

若 \(p\nmid n\) 则 \(\boldsymbol\varphi(n\times p)=\boldsymbol\varphi(p)\cdot\boldsymbol\varphi(n)=(p-1)\cdot\boldsymbol\varphi(n)\)

总结起来就是: \(\boldsymbol\varphi(p\times n)=\boldsymbol\varphi(n)\times \begin{cases} p,p\mid n \\\ \\ p-1,p\nmid n \end{cases}\)

使用线性筛可以 \(O(n)\) 求出

int prime[MAXN],fc[MAXN],phi[MAXN],cntprime;

phi[1]=1;

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

if(fc[i]==0){

prime[++cntprime]=i;

fc[i]=i;

phi[i]=i;

}

for(int j=1;j<=cntprime&&j

fc[i*prime[j]]=prime[j];

phi[i*prime[j]]=phi[i]*(prime[j]-1);

}

phi[i*fc[i]]=phi[i]*fc[i];

fc[i*fc[i]]=fc[i];

}

来源:https://www.cnblogs.com/JustinRochester/p/12366457.html

c语言互质欧拉函数,互质与欧拉函数相关推荐

  1. c语言互质欧拉函数,互质与欧拉函数学习笔记

    互质与欧拉函数学习笔记 互质 定义: ​ \(\forall a,b\in \N\) ,若 \(gcd(a,b)=1\) ,则称 \(a,b\) 互质. 积性函数 定义: ​ 如果 \(a,b\) 互 ...

  2. 欧拉函数+欧拉定理+拓展欧拉定理(欧拉降幂)

    目录 欧拉函数 欧拉定理 拓展欧拉定理(欧拉降幂) 欧拉函数 在数论中,有正整数n,欧拉函数是小于n的正整数中与n互质的数的数目. 它的通式如下: φ(n)=n*(1-1/p1)*(1-1/p2)*( ...

  3. 递归重入c语言延时函数多任务程序设计中的函数重入问题按照Keil的规范对函数添加关键字“reentrant”,将函数定义为可重入的 void Delay_MS(x) reentrant

    c语言延时函数_子牙篇(2)多任务程序设计中的函数重入问题 weixin_39559333 2020-11-29 09:07:44  39  收藏 文章标签: c语言延时函数 c语言延时函数delay ...

  4. R语言笔记6:在R中写一些简单的函数、functions基础和作用域

    R语言基础系列: 1数据类型(向量.数组.矩阵. 列表和数据框) 2读写数据所需的主要函数.与外部环境交互 3数据筛选--提取对象的子集 4向量.矩阵的数学运算 5控制结构 Your first R ...

  5. R语言使用psych包进行探索性因子分析EFA、使用cov2cor函数将原始数据的协方差矩阵将其转换为相关性矩阵( covariance matrix into correlation matrix)

    R语言使用psych包进行探索性因子分析EFA.使用cov2cor函数将原始数据的协方差矩阵将其转换为相关性矩阵( covariance matrix transform into correlati ...

  6. R语言使用str_locate函数和str_locate_all函数来定位特定字符串或者字符串模式在字符串中的位置:str_locate函数第一个位置、str_locate_all函数定位所有位置

    R语言使用str_locate函数和str_locate_all函数来定位特定字符串或者字符串模式在字符串中的位置:str_locate函数第一个位置.str_locate_all函数定位所有位置 目 ...

  7. R语言ggplot2可视化:ggplot2可视化分组散点图并使用geom_smooth函数在散点图图中为不同的散点簇添加对应的回归曲线

    R语言ggplot2可视化:ggplot2可视化分组散点图并使用geom_smooth函数在散点图图中为不同的散点簇添加对应的回归曲线 目录

  8. R语言ggplot2可视化绘制二维的密度图:在R中建立二维散点数据的连续密度热图、2D密度估计、MASS包中的kde2d函数实现2D密度估计、geom_density2d函数可视化二维密度图

    R语言ggplot2可视化绘制二维的密度图:在R中建立二维散点数据的连续密度热图.2D密度估计.MASS包中的kde2d函数实现2D密度估计.geom_density2d函数可视化二维密度图 目录

  9. R语言将dataframe数据从宽表(wide)变为长表(long)实战:tidyr包的gather函数、cdata包的unpivot_to_blocks函数、data.table使用melt函数

    R语言将dataframe数据从宽表(wide)变为长表(long)实战:tidyr包的gather函数.cdata包的unpivot_to_blocks函数.data.table使用melt函数 目 ...

  10. R语言ggplot2可视化散点图并添加平滑曲线、WVPlots包BinaryYScatterPlot函数可视化一起中一个变量为二元离散变量的散点图(随着年龄变化是否有健康保险的客户的比例)

    R语言ggplot2可视化散点图并添加平滑曲线.WVPlots包BinaryYScatterPlot函数可视化一起中一个变量为二元离散变量的散点图(随着年龄变化是否有健康保险的客户的比例) 目录

最新文章

  1. html完整表格结构,正确认识html表格(table)的结构
  2. 利用可视化软件navicat对mysql进行语句查询的使用(增删改查)
  3. eclipse 的project explorer问题,这个怎样把localFileSystem去掉,
  4. macOS Ventura 正式版发布 苹果官方详解macOS 13 Ventura正式版
  5. 区块链学习笔记25——总结
  6. 萌新的linux之旅27
  7. 机器学习算法——手动搭建决策树分类器(代码+作图)
  8. Android 第五章 TextView
  9. c++通过宏控制Log日志的显示与否
  10. 华为鸿蒙手机用大卡还是小卡,教你解决SIM卡剪卡导致华为P8手机不识卡的问题...
  11. python 利用cartopy绘制世界地图中部分地区的风场的流线形式
  12. 三星sec.android.soagent,【图片】(原贴删)原不用ROOT禁用系统软件的方法,加详细教程。【note4吧】_百度贴吧...
  13. STEmwin教程零:STM32 STEmwin移植(裸机FreeRTOS系统)
  14. 2021年双十一活动,淘宝/天猫喵糖/京东双11任务自动助手软件+淘宝/京东/拼多多/抖音/直播抢购软件,分享代码
  15. 神经网络滤镜安装教程图,ps神经网络滤镜安装包
  16. 数字货币步伐加快,苏州将于双十二推出数字人民币红包测试
  17. moment 使用 总结
  18. jquery ---to be continued
  19. 入职两周,怀疑自己进了假百度!跟传说中完全不一样!难道真有两家百度公司?
  20. C语言中 \0 代表什么

热门文章

  1. 介绍两种游标cursor与sys_refcursor
  2. 仰望星空,脚踏实地 2016
  3. FMI飞马网【线上直播】京东POP接口自动化测试
  4. Ubuntu交叉编译U-boot
  5. 数据预处理 ToTensor和Normalize
  6. 多宽带联网(五) 仅使用Windows进行多宽带叠加
  7. SpringBoot+Vue 微信支付API V3
  8. sql server2000安装quot;挂起quot;的解决方法
  9. 如何获得TTF字体中字符对应的编码?
  10. Keil黑色背景页面设置