由算术基本定理可得:
任何一个大于1的N的自然数,如果N不为质数,可以被分解成有限个质数的乘机,即 n=(p1a1)*(p2a2)(p3a3)*……*(pnan),在这里(p1<p2<p3<……<pn)pi为质数,ai为正整数。
所以n的正因数的个数为(a1+1)
(a2+2)……(an+1)。
这里为什么时各个质因数的指数加上1呢?
因为在组成n的因数的时候我们可以选择将该质因数取0,1,2……ai个,所以质因数pi对于n的因数的个数的贡献是(ai+1)。例如:12=(22)*(31),当3取0个时,2可以取0个,1个,2个即12的正因数为1,2,4(个数为3),同理当3取1个时,2可以取0,1,2个,即12的正因数为3,6,12(个数为3),所以就是(2+1)*(1+1)=6。

欧拉线性筛保证每个数只会取到一次,所以时间复杂度为O(n)

int  pre[maxn],vis[maxn],prime[maxn],fac[maxn];  //pre为最小因数出现的个数,vis为该数是否已经出现过,prime保存的时质数int cnt=0;fac[1]=1;for(int i=2;i<maxn;i++){if(!vis[i])   prime[cnt++]=i,pre[i]=1,fac[i]=2;   //当i为质数时,i出现的次数为1,质数的正因素的个数为2,1和他自己for(int j=0;j<cnt&&i*prime[j]<maxn;j++){vis[i*prime[j]]=1;if(i%prime[j]==0){ pre[i*prime[j]] = pre[i]+1;  //i*prime[j]中prime[j]出现的次数为i中prime[j]出现的个数加1fac[i*prime[j]]=fac[i]/(pre[i]+1)*(pre[i*prime[j]]+1); //i*prime[j]中的正因数出现的个数需要去掉prime[j]对于i的贡献,再乘上i*prime[j]中的最小质数的个数+1。}pre[i*prime[j]]=1;   //prime[j]出现的次数为1fac[i*prime[j]]=(pre[i*prime[j]]+1)*fac[i];}}

欧拉线性筛 求n的最小正因数的个数相关推荐

  1. 欧拉线性筛 与 欧拉函数 + 几道例题

    欧拉线性筛 生成素数表prime[]数组 const int maxn = 1e7+5; int prime[maxn]; int visit[maxn]; void Prime(){memset(v ...

  2. 洛谷 - P1217 [USACO1.5]回文质数 Prime Palindromes(欧拉线性筛+数论小知识)

    题目链接:点击查看 题目大意:给出一个a和b,求出区间[a,b]中所有回文质数,回文质数指的是一个数既是回文数也是质数 题目分析:首先质数好判断,我们只需要用欧拉筛预处理打好表即可,判断回文数我们也只 ...

  3. 牛客 - lglg说要有题,于是便有了题。(欧拉线性筛+打表+思维)

    题目链接:点击查看 题目大意:给出公式,代表第i个素数,现在给出n,求出答案,对于答案保留整数 题目分析:这个题目因为涉及到了素数,先用欧拉线性筛打个素数表再说,打完了然后分析一下时间复杂度,给出的样 ...

  4. 牛客3007E-立方数-欧拉线性筛+素数分解+二分

    链接:https://ac.nowcoder.com/acm/contest/3007/E 来源:牛客网 题目描述: 对于给定的正整数 N,求最大的正整数 A,使得存在正整数 B,满足 A3B=N 输 ...

  5. 欧拉(线性)筛 Miller_Rabin 测试素数

    void make_prime()//欧拉筛 {is_prime[1]=is_prime[0]=true;for(int i=2;i<=1e6;i++){if(!is_prime[i]){pri ...

  6. 欧拉线性筛法求素数(顺便实现欧拉函数的求值)

    标签:欧拉筛法   素数   欧拉函数   phi 我们先来看一下最经典的埃拉特斯特尼筛法.时间复杂度为O(n loglog n) int ans[MAXN]; void Prime(int n) { ...

  7. ACM-ICPC 2018 南京赛区网络预赛 J Sum(欧拉线性筛+思维)

    Sum 问题分析 题意:我们将类似于6=2⋅36=2⋅36 = 2\cdot 3这样的数称为asquare−freeintegerasquare−freeintegera\:square-free\: ...

  8. 筛表合集(素数筛 欧拉函数筛 莫比乌斯函数筛)

    [目录] 一.素数筛 1.素数判断 2.素数普通筛 3.素数线性筛 4.素数区间筛 二.欧拉函数筛 三.莫比乌斯函数筛 [素数筛] 1.直接判定质数 bool judgePrime( int num ...

  9. 线性筛求莫比乌斯函数前缀和

    大家知道有一类问题,让你把1~N之间每一个数的莫比乌斯函数都输出来,或者把它们全部加起来再输出.这种问题应该属于求前缀和一类的啦 用正规的方式表达: 就论求1~N间每个数的莫比乌斯函数吧.我们一般使用 ...

最新文章

  1. Python设计模式-装饰器模式
  2. P1102 A-B 数对(二分,映射)难度⭐
  3. Angel:深度学习在腾讯广告推荐系统中的实践
  4. mui用ajax上拉加载更多,mui上拉加载更多的使用
  5. html编辑器linux,HTML 编辑器
  6. 微软AirSim,一个无人机和机器人的模拟器
  7. Highcharts隐藏网格线
  8. SpringBoot入门到精通_第6篇 _必知必会
  9. ip地址理解 192.168.19.255/20
  10. 190303每日一句
  11. SQLyog使用教程
  12. 【开源】3串锂电池充放电保护板设计参考
  13. (一)Word中如何将表格断开,并且增加空的一行
  14. pycharm: Error: Cannot run program……
  15. GreatSQL配置到系统systemd服务
  16. 嵌入式硬件Linux,嵌入式linux硬件什么要求
  17. 发送打印命令后打印机没反应,重启打印机之后才能打印
  18. python 往mysql数据库存储照片
  19. 常见的网络接口解释(E1、FE、GE、10GE、POTS)
  20. java vb 速度_使用VB.NET加快代码开发速度

热门文章

  1. 2023常用的10款电力电子系统仿真分析软件推荐
  2. 使用Python进行ADSL宽带拨号连接等操作
  3. Tomcat的部署、虚拟主机及优化
  4. 性能测试框架——python+locust
  5. 死于贫困交加的七位美国总统
  6. MapReduce算法(计算出10月1日这天载客次数超过10次的车辆,载客总次数,载客详细时间。)
  7. 【无标题】Realsense ROS驱动安装以及报错处理
  8. 深入探索JVM高效并发 — Java内存模型(四) 先行发生原则
  9. [MySQL] 日志刷盘机制
  10. 一文详解私募基金投资策略(8大类17小类)