O(n) 筛选素数

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int M = 1e6 + 10 ;
  4.  
  5. int mindiv[M] ;//每个数的最小质因数
  6. int prim[M] , pnum ;//存素数
  7. bool vis[M] ;
  8.  
  9. void prim () {
  10. for (int i = 2 ; i < M ; i ++) {
  11. if (!vis[i]) {
  12. mindiv[i] = i ;
  13. prim[ pnum++ ] = i ;
  14. }
  15. for (int j = 0 ; j < pnum ; j ++) {
  16. if ( i*prim[j] >= M ) break ;
  17. vis[ i*prim[j] ] = 1 ;
  18. mindiv[i] = prim[j] ;
  19. if (i % prim[j] == 0) break ;
  20. }
  21. }
  22. }
  23.  
  24. int main () {
  25. prim () ;
  26. return 0 ;
  27. }

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

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

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. using namespace std;
  5. const int M = 1e6 + 10 ;
  6.  
  7. int n, m, T;
  8.  
  9. int euler[M];
  10.  
  11. void Euler () {
  12. for(int i = 0; i < M ; i ++) euler[i] = i;
  13. for(int i = 2; i < M ; i ++){
  14. if(euler[i] == i) {
  15. for (int j = i; j < M ; j += i) {
  16. euler[j] = euler[j] - euler[j]/i;
  17. }
  18. }
  19. }
  20. }
  21.  
  22. int main(){
  23. Euler ();
  24. int n ;
  25. while (~ scanf ("%d" , &n)) printf ("%d\n" , euler[n]) ;
  26. return 0;
  27. }

  

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

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int M = 1e6 + 10 ;
  4. int prim[M] , pnum ;
  5. bool vis[M] ;
  6. int phi[M] ;
  7.  
  8. void Euler () {
  9. for (int i = 2 ; i < M ; i ++) {
  10. if (!vis[i]) {
  11. prim[ pnum++ ] = i ;
  12. phi[i] = i - 1;
  13. }
  14. for (int j = 0 ; j < pnum ; j ++) {
  15. int x = i * prim[j] ;
  16. if (x >= M ) break ;
  17. vis[x] = 1 ;
  18. if (i % prim[j] == 0) {
  19. int y = i , cnt = 0 , z = prim[j] ;
  20. while (y % prim[j] == 0) cnt ++ , y /= prim[j] , z *= prim[j] ;
  21. if (y == 1) phi[x] = x - x/prim[j] ;
  22. else phi[x] = phi[y] * phi[z] ;
  23. break ;
  24. }
  25. else phi[x] = phi[i] * phi[ prim[j] ] ;
  26. }
  27. }
  28. }
  29.  
  30. int main () {
  31. Euler () ;
  32. int n ;
  33. while (~ scanf ("%d" , &n)) printf ("%d\n" , phi[n]) ;
  34. return 0 ;
  35. }

  线性欧拉跟新:

  1. #include<cstdio>
  2. #include<iostream>
  3. using namespace std;
  4. int prime[100005],phi[1000005];
  5. int main(){
  6. int i,j;
  7. for(i=2;i<1000002;++i){
  8. if(!phi[i]){
  9. phi[i]=i-1;
  10. prime[++prime[0]]=i;
  11. }
  12. for(j=1;j<=prime[0]&&(long long)i*prime[j]<1000002;++j)
  13. if(i%prime[j])phi[i*prime[j]]=phi[i]*(prime[j]-1);
  14. else{
  15. phi[i*prime[j]]=phi[i]*prime[j];
  16. break;
  17. }
  18. }
  19. int T,n;
  20. scanf("%d",&T);
  21. while(T--){
  22. scanf("%d",&n);
  23. printf("%d\n",phi[n+1]);
  24. }
  25. }

  

素数的线性筛 && 欧拉函数的更多相关文章

  1. The Euler function(线性筛欧拉函数)

    /* 题意:(n)表示小于n与n互质的数有多少个,给你两个数a,b让你计算a+(a+1)+(a+2)+......+b; 初步思路:暴力搞一下,打表 #放弃:打了十几分钟没打完 #改进:欧拉函数:具体 ...

  2. 积性函数&线性筛&欧拉函数&莫比乌斯函数&因数个数&约数个数和

    只会搬运YL巨巨的博客 积性函数 定义 积性函数:对于任意互质的整数a和b有性质f(ab)=f(a)f(b)的数论函数. 完全积性函数:对于任意整数a和b有性质f(ab)=f(a)f(b)的数论函数 ...

  3. [bzoj 2190][SDOI2008]仪仗队(线性筛欧拉函数)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2190 分析:就是要线性筛出欧拉函数... 直接贴代码了: memset(ans,,sizeof ...

  4. Bzoj 2186: [Sdoi2008]沙拉公主的困惑 乘法逆元,线性筛,欧拉函数,数论

    2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 2560  Solved: 857[Submit][St ...

  5. BZOJ 2190 仪仗队(线性筛欧拉函数)

    简化题意可知,实际上题目求得是gcd(i,j)=1(i,j<=n)的数对数目. 线性筛出n大小的欧拉表,求和*2+1即可.需要特判1. # include <cstdio> # in ...

  6. poj1248 (线性筛欧拉函数)(原根)

    强烈鸣谢wddwjlss 题目大意:给出一个奇素数,求出他的原根的个数,多组数据. 这里先介绍一些基本性质 阶 设\((a,m)=1\),满足\(a^r \equiv 1 \pmod m\)的最小正整 ...

  7. BZOJ 2818 GCD 素数筛+欧拉函数+前缀和

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2818 题意:给定整数N,求1<=x,y<=n且Gcd(x,y)为素数的数对( ...

  8. noip复习——线性筛(欧拉筛)

    整数的唯一分解定理: \(\forall A\in \mathbb {N} ,\,A>1\quad \exists \prod\limits _{i=1}^{s}p_{i}^{a_{i}}=A\ ...

  9. Farey Sequence (素筛欧拉函数/水)题解

    The Farey Sequence Fn for any integer n with n >= 2 is the set of irreducible rational numbers a/ ...

随机推荐

  1. 手机卫士开发记录之handler错误

  2. Django_collections01

    python manage.py flush python manage.py changepassword username python manage.py createsuperuser pyt ...

  3. CentOS7安装hive-2.1.0

    环境: CentOS7 Hadoop-2.6.4,配置两个节点:master.slave1 mysql-server 过程: 下载.解压hive-2.1.0到/usr/hadoop-2.6.4/thi ...

  4. Axure7.0汉化方法

    下载汉化包 AxureRP7CN_汉化包.rar 首先退出正在运行中的 Axure (如果您正在使用). 将 汉化包.rar 文件解压, 得到 lang 文件夹,  然后将其复制到 Axure 安装目 ...

  5. select()

    select(),确定一个或多个套接口的状态,本函数用于确定一个或多个套接口的状态,对每一个套接口,调用者可查询它的可读性.可写性及错误状态信息,用fd_set结构来表示一组等待检查的套接口,在调用返 ...

  6. C# 判断 当前设备的IP地址、默认网关、子网掩码在不在同一网段内

    要判断两个IP地址是不是在同一个网段,就将它们的IP地址分别与子网掩码做与运算,得到的结果一网络号,如果网络号相同,就在同一子网,否则,不在同一子网. 例:假定选择了子网掩码255.255.254.0 ...

  7. hdu 1873 看病要排队(优先级队列)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1873 题目大意: 三个医生看病,病人排队看病,病人有优先级,优先级高的提前看病,同样的优先级按先后.I ...

  8. B1/B2签证拒签

    http://www.mcdvisa.com/html/News/USA_visa_news/201529/152917GE.html

  9. jquery 停止animate动画,并且回复最初状态

    // 热门推荐悬浮效果 $("#recom_con li img").mouseenter(function(){ $(this).stop(true, true); $w = p ...

  10. EF DbModelBuilder

    protected override void OnModelCreating(DbModelBuilder modelBuilder) { var model = modelBuilder.Buil ...