互质与欧拉函数学习笔记

互质

定义:

​ \(\forall a,b\in \N\) ,若 \(gcd(a,b)=1\) ,则称 \(a,b\) 互质。

积性函数

定义:

​ 如果 \(a,b\) 互质时,有 \(f(ab)=f(a)*f(b)\) ,那么称函数 \(f\) 为积性函数。

性质:

​ 若 \(f\) 为积性函数,且在算数基本定理中, \(n=\prod\limits_{i=1}^m p_i^{c_i}\) ,则 \(f(n)=\prod\limits_{i=1}^m f(p_i^{c_i})\) 。

欧拉函数

定义:

​ \(1\sim N\) 中与 \(N\) 互质的数的个数被称为欧拉函数,记为 \(\varphi(N)\) 。

若在算数基本定理中, \(N=p_1^{c_1}p_2^{c_2}\cdots p_m^{c_m}\) ,则: \(\varphi(N)=N*\frac{p_1-1}{p_1}*\frac{p_2-1}{p_2}\cdots\frac{p_m-1}{p_m}=N*\prod\limits_{质数p\mid N}(1-\frac{1}{p})\) 。

证明:

​ 设 \(p\) 是 \(N\) 的质因子, \(1\sim N\) 中 \(p\) 的倍数共有 \(N/p\) 个。同理,若 \(q\) 也是 \(N\) 的质因数,则 \(1\sim N\) 中 \(q\) 的倍数有 \(N/q\) 个。若我们将这 \(N/p+N/q\) 个数去掉,那么 \(p*q\) 的倍数被排除了两次,需要加回来一个。因此,根据容斥原理, \(1\sim N\) 中不与 \(N\) 含公共质因子 \(p\) 或 \(q\) 的数的个数为:

​ \(N-\frac{N}{p}-\frac{N}{q}+\frac{N}{pq}=N(1-\frac{1}{p})(1-\frac{1}{q})\)

​ 类似的,我们对于 \(N\) 的全部质因子使用容斥原理,即可得到 \(\varphi(N)\) 。

性质

\(\forall n>1,1\sim n\) 中与 \(n\) 互质的数之和为 \(n*\varphi(n)/2\) 。

若 \(a,b\) 互质,则 \(\varphi(ab)=\varphi(a)\varphi(b)\) 。

设 \(p\) 为质数,若 \(p\mid n\) 且 \(p^2\mid n\) ,则 \(\varphi(n)=\varphi(n/p)*p\) 。

设 \(p\) 为质数,若 \(p\mid n\) 且 \(p^2\not|n\) ,则 \(\varphi(n)=\varphi(n/p)*(p-1)\) 。

\(\sum\limits_{d|n}\varphi(d)=n\) 。

证明:

​ 因为 \(gcd(n,x)=gcd(n,n-x)\) ,所以与 \(n\) 不互质的数 \(x,n-x\) 成对出现,平均值为 \(n/2\) 。因此,与 \(n\) 互质的数的平均值也是 \(n/2\) ,性质 \(1\) 成立。

​ 根据欧拉函数的计算式,因为 \(gcd(a,b)=1\) ,所以它们没有除了 \(1\) 以外的公约数,计算时不会重复出现 \((1-\frac{1}{p})\) ,性质 \(2\) 成立。

​ 若 \(p\mid n\) 且 \(p^2\mid n\) ,则 \(n,n/p\) 包含相同的质因子,按照欧拉函数的计算公式,两者相除商为 \(p\) ,性质 \(3\) 成立。

​ 若 \(p\mid n\) 且 \(p^2\not|n\) ,则 \(gcd(n,n/p)=1\) ,由 \(\varphi\) 是积性函数得 \(\varphi(n)=\varphi(n/p)*\varphi(p)\) 。其中 \(\varphi(p)=p-1\) ,性质 \(4\) 成立。

​ 设 \(f(n)=\sum\limits_{d|n}\varphi(d)\) 。用乘法分配率展开比较,再利用 \(\varphi\) 是积性函数,得到:若 \(gcd(n,m)=1\) ,则 \(f(nm)=\sum\limits_{d|nm}\varphi(d)=(\sum\limits_{d|n}\varphi(d))*(\sum\limits_{d|m}\varphi(d))=f(n)*f(m)\) 。即 \(f\) 是积性函数,对于单个质因子, \(f(p^m)=\sum\limits_{d|p^m}\varphi(d)=\varphi(1)+\varphi(p)+\varphi(p^2)+\cdots+\varphi(p^m)\) 是一个等比数列求和再加 \(1\) ,结果为 \(p^m\) 。所以 \(f(n)=\prod\limits_{i=1}^m f(p_i^{c_i})=\prod\limits_{i=1}^m p_i^{c_i}=n\) ,性质 \(5\) 成立。

例题

题面

Solution

分析题目可以发现,除了 \((1,0)\) , \((0,1)\) 和 \((1,1)\) 三个点之外,一个钉子 \((x,y)\) 能被看到,当且仅当 \(gcd(x,y)=1\) 时成立。

由于能看到的钉子明显是关于 \(y=x\) 这条直线对称的,所以我们只需要求其中一半即可。对于该坐标系的右下方可以看到的钉子,满足对于每个 \(2\leq x\leq N\) 都有 \(1\leq y

综上所述,本题的答案就是 \(3+2*\sum\limits_{i=2}^N\varphi(i)\) 。我们要做的就是求出 \(2\sim N\) 中每个数的欧拉函数。

Code

#include

#include

#include

#include

#include

#include

#include

#include

#define ll long long

using namespace std;

templatevoid read(T &x)

{

x=0;char k=getchar();int f=1;

for(;k>'9'||k

for(;k>='0'&&k<='9';k=getchar()) x=x*10+k-'0';

x*=f;

}

int n,ans;

int prime[40005],tot,phi[40005];

bool is_not_pr[40005];

inline void prepare()

{

phi[1]=1;

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

{

if(!is_not_pr[i])

{

prime[++tot]=i;

phi[i]=i-1;

}

for(int j=1;j<=tot&&i*prime[j]

{

is_not_pr[i*prime[j]]=1;

if(i%prime[j]==0)

{

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

break;

}

else phi[i*prime[j]]=phi[i]*phi[prime[j]];

}

}

}

int main()

{

read(n);

if(n==1) printf("0");

else

{

prepare();

for(int i=2;i

printf("%d\n",ans*2+3);

}

return 0;

}

总结

这一部分的题要善于问题转化,将问题化简为可做的模式,同时它的拓展——莫比乌斯反演也是比较重要的一类题,要抽时间去看一下。

c语言互质欧拉函数,互质与欧拉函数学习笔记相关推荐

  1. main函数解析(一)——Linux-0.11 学习笔记(五)

    main()函数解析(一)--Linux-0.11 学习笔记(五) 经过了前面的各种铺垫,终于来到了main函数.这篇博客的任务是把init/main.c讲清楚.由于牵扯到很多的函数调用,要想一次就说 ...

  2. main 函数解析(二)—— Linux-0.11 学习笔记(六)

    main函数解析(二)--Linux-0.11 学习笔记(六) 4.6 blk_dev_init函数 void blk_dev_init(void) {int i;for (i=0 ; i<NR ...

  3. 拉勾启源老师mysql讲义,【拉勾教育数据分析实战训练营】--Tableau学习笔记-重点回顾1...

    [拉勾教育数据分析实战训练营]--Tableau学习笔记-重点回顾1 [拉勾教育数据分析实战训练营]--Tableau学习笔记-重点回顾1 以下是我搜罗的一些官方优秀case分享: 1.https:/ ...

  4. 翻转电平函数实现LED闪烁-STM32电控学习笔记05

    翻转电平函数实现LED闪烁-STM32电控学习笔记05 day5:2022/9/23 [函数介绍] 在前面帖子大致了解了一下HAL_GPIO_WritePin()函数和HAL_Delay()函数的用法 ...

  5. python定义函数的组成部分有_Python文档学习笔记(4)--定义函数

    定义函数 关键字 def 引入函数的定义.其后必须跟有函数名和以括号标明的形式参数列表.组成函数体的语句从下一行开始,且必须缩进. 执行 一个函数会引入一个用于函数的局部变量的新符号表. 因此,在函数 ...

  6. c语言中使用的字符常量 其起止标记,C Primer Plus学习笔记(三)- 字符串和格式化输入/输出...

    从一个简单的例子开始 #include int main() { char name[10]; printf("Input Your Name:\n"); scanf(" ...

  7. slua 是c语言开发的吗,初学者必备文档:LUA新手快速学习笔记

    LUA程序设计语言 是一个简洁.轻量.可扩展的脚本语言.LUA读作/'lua/(噜啊),是葡萄牙语中"Luna"(月亮)的意思. LUA的目标是成为一个很容易嵌入其它语言中使用的语 ...

  8. python函数第二次运行报错_Python学习笔记2-函数、高级特性

    函数 调用函数 要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs,只有一个参数 >>> abs(100) 100 >>> abs(-20) 20 ...

  9. 函数传参和实际应用—JS学习笔记2015-6-5(第49天)

    函数传递参数 参数=JS的数据类型=>数字.字符串.布尔.函数.对象.未定义 传递有名字的函数,直接传递函数名就可以了. fn1(100, 'px'); function fn1(a, b){/ ...

  10. 函数传参之商品价格计算—JS学习笔记2015-6-6(第50天)

    经常我们可以看到很多网站会有多个相同功能的模块,比如淘宝首页的轮播,比如新浪首页的tab切换: 那么可以看出这些地方在HTML结构上是类似的,所以我们可以考虑用一块功能代码去实现,而不同是仅仅是传递参 ...

最新文章

  1. FT(Fourier Transform)在滤波上的应用
  2. linux下Redis以及phpredis扩展安装
  3. MaperReduce实验
  4. hibernateTemplate的load方法
  5. dell跳过开机硬件检测_移动工作站DELL Precision 7740评测连载2:开机初测
  6. php django mysql配置文件_Mysql学习Django+mysql配置与简单操作数据库实例代码
  7. python内置函数源代码_4.内置函数源码总结
  8. Applese 走方格
  9. 我是如何学习写一个操作系统(三):操作系统的启动之保护模式
  10. ZOJ 3204 Connect them 继续MST
  11. 蓝桥训练系统 矩阵乘法
  12. 让计算机桌面更加美丽课件,让计算机桌面更加美丽_1.doc
  13. Python处理QXDM抓取log
  14. 微信公众号后台开发---永久素材失效
  15. 怎么读取cf卡id_CF卡传输程序的步骤解析
  16. 金蝶实现EXCEL复制粘贴功能
  17. Ubuntu:火狐浏览器加速下载(Flashgot+Aria2+Uget)
  18. ftp 下载 工具,5款小白都能使用的ftp 下载 工具
  19. Problem D. S03-05 计算球体表面积和体积
  20. 球机器人 配重_DIY:拥有绝佳移动力的球平衡机器人

热门文章

  1. 在校大学生谈项目管理
  2. 精品推荐好资源免费送,总有一个适合你。
  3. 4 活动生命周期:活动的一生
  4. 雅思口语备考模仿练习有没有用?
  5. 视力仅剩0.05,接近于盲人,是谁偷走了他的视力?
  6. snort 日志 mysql_Snort日志输出插件详解
  7. Python函数(函数定义、函数调用)用法详解
  8. 用卷积公式计算“独立随机变量之和”的概率分布 Distribution of sum of independent Rayleigh random variables
  9. c# ContextMenuStrip控件简单用法
  10. [CoffeeScript]咖啡,入门