O(n) 筛选素数

#include<bits/stdc++.h>
using namespace std;
const int M = 1e6 + 10 ;int mindiv[M] ;//每个数的最小质因数
int prim[M] , pnum ;//存素数
bool vis[M] ;void prim () {for (int i = 2 ; i < M ; i ++) {if (!vis[i]) {mindiv[i] = i ;prim[ pnum++ ] = i ;}for (int j = 0 ; j < pnum ; j ++) {if ( i*prim[j] >= M ) break ;vis[ i*prim[j] ] = 1 ;mindiv[i] = prim[j] ;if (i % prim[j] == 0) break ;}}
}int main () {prim () ;return 0 ;
}

  欧拉函数:phi[i] 为<= i 的范围内与i互质的数的数量

  欧拉埃筛,写起来简单,复杂度O(log(log(N)))(zstu 幻神):

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int M = 1e6 + 10 ;int n, m, T;int euler[M];void Euler () {for(int i = 0; i < M ; i ++) euler[i] = i;for(int i = 2; i < M ; i ++){if(euler[i] == i) {for (int j = i; j < M ; j += i) {euler[j] = euler[j] - euler[j]/i;}}}
}int main(){Euler ();int n ;while (~ scanf ("%d" , &n)) printf ("%d\n" , euler[n]) ;return 0;
}

  

欧拉线筛,写起来复杂点,(墨迹了我半天)复杂度O(N):

#include<bits/stdc++.h>
using namespace std;
const int M = 1e6 + 10 ;
int prim[M] , pnum ;
bool vis[M] ;
int phi[M] ;void Euler () {for (int i = 2 ; i < M ; i ++) {if (!vis[i])  {prim[ pnum++ ] = i ;phi[i] = i - 1;}for (int j = 0 ; j < pnum ; j ++) {int x = i * prim[j] ;if (x >= M ) break ;vis[x] = 1 ;if (i % prim[j] == 0) {int y = i , cnt = 0 , z = prim[j] ;while (y % prim[j] == 0) cnt ++ , y /= prim[j] , z *= prim[j] ;if (y == 1) phi[x] = x - x/prim[j] ;else phi[x] = phi[y] * phi[z] ;break ;}else phi[x] = phi[i] * phi[ prim[j] ] ;}}
}int main () {Euler () ;int n ;while (~ scanf ("%d" , &n)) printf ("%d\n" , phi[n]) ;return 0 ;
}

  线性欧拉跟新:

#include<cstdio>
#include<iostream>
using namespace std;
int prime[100005],phi[1000005];
int main(){int i,j;for(i=2;i<1000002;++i){if(!phi[i]){phi[i]=i-1;prime[++prime[0]]=i;}for(j=1;j<=prime[0]&&(long long)i*prime[j]<1000002;++j)if(i%prime[j])phi[i*prime[j]]=phi[i]*(prime[j]-1);else{phi[i*prime[j]]=phi[i]*prime[j];break;}}int T,n;scanf("%d",&T);while(T--){scanf("%d",&n);printf("%d\n",phi[n+1]);}
}

  

转载于:https://www.cnblogs.com/get-an-AC-everyday/p/4747832.html

素数的线性筛 欧拉函数相关推荐

  1. 【数学知识】三种方法求 [1,n] 中所有数欧拉函数(线性筛欧拉函数优化至 O(n) )

    整理的算法模板合集: ACM模板 ①直接求小于或等于n,且与n互质的数个数(求[1,n]中所有数的欧拉函数时间复杂度:O(nn)O(n\sqrt{n})O(nn​)) ②求[1,n]之间每个数的质因数 ...

  2. bzoj2186,P2155-[SDOI2008]沙拉公主的困惑【线性筛,欧拉函数,逆元】

    正题 题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2186 https://www.luogu.org/problem/P2155 题 ...

  3. 为什么线性筛欧拉函数i%prime[j]==0的时候phi[i*prime[j]]=phi[i]*prime[j]

    看贾志鹏线性筛的时候想起来的. 我有一个繁琐的证明- -. 证明ϕ(pm)=p×ϕ(m),p为素数,m∈Z\phi(pm)=p\times\phi(m),p为素数,m\in \Bbb Z. 设 m=p ...

  4. 素数的线性筛法java,埃氏筛 线性筛(欧拉筛) 算法解析

    埃氏晒 埃拉托斯特尼筛法,简称埃氏晒,是一种用来求自然数n以内的全部素数. 他的基本原理是,如果我们要获得小于n的所有素数,那就把不大于根号n的所有素数的倍数剔除. 埃氏晒的原理很容易理解,一个合数, ...

  5. 线性筛法 与 线性求欧拉函数 的计算模板

    简介 懂得如何快速计算质数是十分重要的 在筛法的基础上,我们可以使用更为高级的线性筛法! 顾名思义,就是时间复杂度是线性的,即 O(N)O(N) ,N 为所求的质数范围 而对编程有所接触的人,应该都知 ...

  6. 埃氏筛 线性筛(欧拉筛) 算法解析

    埃氏晒 埃拉托斯特尼筛法,简称埃氏晒,是一种用来求自然数n以内的全部素数. 他的基本原理是,如果我们要获得小于n的所有素数,那就把不大于根号n的所有素数的倍数剔除. 埃氏晒的原理很容易理解,一个合数, ...

  7. [模板] 线筛欧拉函数

    今天复习了一些数学方面的东西,线性筛欧拉是个很重要的东西,先贴代码,免得以后又忘了. #include <iostream> #include <cstdlib> typede ...

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

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

  9. 51nod1227-平均最小公倍数【杜教筛,欧拉函数】

    正题 题目链接:http://www.51nod.com/Challenge/Problem.html#problemId=1227 题目大意 定义 F(a)=∑i=1alcm(a,i)aF(a)=\ ...

  10. 【Luogu3768】简单的数学题(莫比乌斯反演/杜教筛/欧拉函数)

    [Luogu3768]简单的数学题 https://www.cnblogs.com/cjyyb/p/8298339.html

最新文章

  1. div+css 技巧摘录
  2. TCP连接过程:三次握手与四次握手—Vecloud微云
  3. tab切换实现方式1
  4. 计算机启动到安全模式,计算机启动每次都进入安全模式怎么办
  5. Angular Service依赖注入的一个具体例子
  6. python购物车实现的功能是什么_Python3实现购物车功能
  7. quartz java spring_从零开始学 Java - Spring 使用 Quartz 任务调度定时器
  8. rocket mq 监听端口_MQ消息最终一致性解决方案
  9. jquery append、prepend、before等等
  10. [转载]Linux驱动-SPI驱动 之二:SPI通用接口层
  11. 动态生成li 根据后台返回个数动态生成li
  12. c语言实验操作期末考试怎么把试题保存,c语言上机操作练习题_相关文章专题_写写帮文库...
  13. 关于Python编码这一篇文章就够了
  14. maven依赖关系中 scope属性含义
  15. UE4官方文档UI学习:2.UMG 创建主菜单
  16. Educational Codeforces Round 77 D.A Game with Traps(二分+差分+前缀和)
  17. electron使用regedit模块时的正确配置方法
  18. 《Real-Time Rendering 4th Edition》全文翻译 - 第6章 纹理化(上)6.1 ~ 6.3
  19. Kafka安装(windows)
  20. cisp含金量怎么样?

热门文章

  1. mybatis-动态sql动态bean实例
  2. css 效果之并列排列
  3. HDU5442 Favorite Donut(KMP+最大表示法)
  4. pythonjson数据解析错误是什么意思_json解析错误怎么办?
  5. [wordpress搬家]马来西亚 你好
  6. vue2.5版本源代码编译报 Could not load ..\vue\src\core/config 错误的问题 npm run dev 编译报错...
  7. python搜索pdf内容所在页码_用python合并多个pdf文件并标页码
  8. win10 小娜搜索失灵
  9. 笔记本外接显示器之后扩展屏分辨率问题
  10. 汇编实验二——选出非负数以及排序