简介

  • 懂得如何快速计算质数是十分重要的

  • 在筛法的基础上,我们可以使用更为高级的线性筛法

  • 顾名思义,就是时间复杂度是线性的,即 O(N)O(N) ,N 为所求的质数范围

  • 而对编程有所接触的人,应该都知道欧拉函数 即 φ(N)φ(N)

  • 听起来高大上,其实就表示 小于等于 N 的数中与 N 互质的数的数目

  • 这在竞赛中用处很大,变式也很多—— ~不明觉厉~

  • 那么如何在 线性时间 内求出 1—N1—N 中的 质数表欧拉函数表 呢?

  • 下面给出两个算法的模板——

线性筛法

  • 这个算法的本质就是在筛法的基础上,加上一个不再重复筛的退出语句

  • 模板如下:

for(int i=2;i<=N;i++)
{if(!bz[i]) f[++f[0]]=i;for(int j=1;j<=f[0] && i*f[j]<=N;j++){bz[i*f[j]]=true;if(i%f[j]==0) break;//极大优化!}
}
  • 注释:标志数组为 bz[N]bz[N] , 质数表为 f[N]f[N] 。

线性求欧拉函数

  • 这个算法的本质就是在筛法的基础上,根据欧拉函数的积性性质来处理

  • 模板如下:

for(int i=2;i<=N;i++)
{if(!bz[i]) phi[f[++f[0]]=i]=i-1;for(int j=1;j<=f[0] && i*f[j]<=N;j++){bz[i*f[j]]=true;if(i%f[j]==0)//同样的极大优化!{phi[i*f[j]]=phi[i]*f[j];break;}else phi[i*f[j]]=phi[i]*(f[j]-1);//欧拉函数的积性性质}
}
  • 注释:标志数组为 bz[N]bz[N] , 质数表为 f[N]f[N] , 欧拉函数表为 phi[N]phi[N] 。

总结

  • 这两个算法有两个优点:

    1. 短小精悍

    2. 复杂度线性,O(N)O(N) 处理

  • 所以在以后的学习中,应熟练掌握这两种算法!

线性筛法 与 线性求欧拉函数 的计算模板相关推荐

  1. ~~筛法求欧拉函数(附模板题)

    模板 int primes[N], cnt; // primes[]存储所有素数 int euler[N]; // 存储每个数的欧拉函数 bool st[N]; // st[x]存储x是否被筛掉voi ...

  2. ~~求欧拉函数(附模板题)

    模板 int phi(int x) {int res = x;for (int i = 2; i <= x / i; i ++ )if (x % i == 0){res = res / i * ...

  3. AcWing 874. 筛法求欧拉函数(线性筛法求欧拉函数模板)

    给定一个正整数 n,求 1∼n 中每个数的欧拉函数之和. 输入格式 共一行,包含一个整数 n. 输出格式 共一行,包含一个整数,表示 1∼n 中每个数的欧拉函数之和. 数据范围 1≤n≤10^6 输入 ...

  4. 【模板题】欧拉函数与线性筛求欧拉函数

    欧拉函数是什么? 定义:对于正整数nnn,欧拉函数是小于或等于nnn的正整数中与nnn互质的数的个数,记作φ(n)\varphi (n)φ(n). φ(1)=1\varphi (1)=1φ(1)=1. ...

  5. 874. 筛法求欧拉函数

    874. 筛法求欧拉函数 题目 代码 题目 给定一个正整数 n,求 1∼n 中每个数的欧拉函数之和. 输入格式 共一行,包含一个整数 n. 输出格式 共一行,包含一个整数,表示 1∼n 中每个数的欧拉 ...

  6. AcWing 874. 筛法求欧拉函数

    线性筛法求解欧拉函数 有关线性筛法的介绍,可以参考这道题:868. 筛质数 - AcWing题库 这道题y总采用了线性筛选法来筛选掉指定范围内的合数,筛选出质数.思维利用得极为巧妙. 结合y总讲解视频 ...

  7. 如何求欧拉函数~转载

    三.欧拉函数 请思考以下问题: 任意给定正整数n,请问在小于等于n的正整数之中,有多少个与n构成互质关系?(比如,在1到8之中,有多少个数与8构成互质关系?) 计算这个值的方法就叫做欧拉函数,以φ(n ...

  8. hdu2824(2009多校第一场) 线性筛法求欧拉函数

    欧拉函数指小于n且与其互质的数个数: phin=n*(1-1/p1)*(1-1/p2)*...(1-1/pn) 由此便可以利用类似筛素数筛出所有欧拉函数,具体看代码: 1 #include<st ...

  9. AcWing 874. 筛法求欧拉函数(欧拉函数)

    题目链接 https://www.acwing.com/problem/content/876/ 思路 对于一个数x如果是质数,那么它的欧拉函数就为x−1x-1x−1,对于其他合数我们可以将其拆成最小 ...

最新文章

  1. 几十年的领域专家告诉你,机器翻译进化到哪一步了?
  2. XPath学习:轴(13)——namespace
  3. Web前端求职时都会被问到的Redis面试题分享
  4. JAVA-循环体小练习——ATM取款机
  5. python实战,教你用微信每天给女朋友说晚安
  6. USACO Training Section 1.2 双重回文数 Dual Palindrom
  7. 用Java解决生产者-消费者问题
  8. 输出空格隔开换行_【前端干货】CSS 的空格处理
  9. Java学习笔记2.3.4 运算符与表达式 - 逻辑运算符
  10. 客服系统微服务架构的演化
  11. gitlab简单使用教程【转】
  12. vue的$message(提示框换行)
  13. 传染病模型中作图与计算(matlab,数学模型)
  14. html中三角函数表示什么,三角函数a怎么求
  15. 浅谈在制造业中建设MES系统的成效
  16. ECSHOP模板堂商品最小起订量插件
  17. 换挡周期下,谁将成为厨电品牌的进取者?
  18. 电脑与云服务器的区别吗,云服务器和普通电脑有什么不同区别?
  19. 为FireFox增加自定义搜索引擎
  20. Java面试:java小项目实例

热门文章

  1. imf瞬时频率跳变问题
  2. C++中了类继承和调用父类的构造函数方法
  3. stm32串口通信(初学者对于串口通信的理解)
  4. 2021年中总结汇报PPT
  5. [云炬创业基础笔记]第二章创业者测试11
  6. ustc小道消息20211216
  7. 科大星云诗社动态20220110
  8. 云炬60s看世界20211126
  9. 20天减10斤 2020-10-21
  10. 【附源码】一看就懂的感知机算法PLA