欧拉函数是少于或等于n的数中与n互质的数的数目

φ(1)=1(定义)

类似与莫比乌斯函数,基于欧拉函数的积性

φ(xy)=φ(x)φ(y)

由唯一分解定理展开显然,得证

精髓在于对于积性的应用:

  1. if(i%p[j]==){phi[i*p[j]]=phi[i]*p[j];break;}
  2. phi[i*p[j]]=phi[i]*(p[j]-);

一个练手题Hdu1286

  1. #include <algorithm>
  2. #include <iostream>
  3. #include <cstring>
  4. #include <cstdlib>
  5. #include <cstdio>
  6. #include <vector>
  7. #include <cmath>
  8. #include <queue>
  9. #include <map>
  10. #include <set>
  11. using namespace std;
  12. #define file(x) freopen(x".in","r",stdin),freopen(x".out","w",stdout)
  13. inline void read(int &ans){
  14. ans=;char x=getchar();int f=;
  15. while(x<''||x>''){if(x=='-')f=;x=getchar();}
  16. while(x>=''&&x<='')ans=ans*+x-'',x=getchar();
  17. if(f)ans=-ans;
  18. }
  19.  
  20. const int maxn=+;
  21. int phi[maxn],p[maxn],flag[maxn],cnt;
  22. void euler(int n){
  23. phi[]=;
  24. for(int i=;i<=n;i++){
  25. if(!flag[i])p[++cnt]=i,phi[i]=i-;
  26. for(int j=;j<=cnt && i*p[j]<=n;j++){
  27. flag[i*p[j]]=;
  28. if(i%p[j]==){phi[i*p[j]]=phi[i]*p[j];break;}
  29. phi[i*p[j]]=phi[i]*(p[j]-);
  30. }
  31. }
  32. }
  33.  
  34. int main(){
  35. euler();
  36. int CN,N;
  37. for(read(CN);CN--;)read(N),printf("%d\n",phi[N]);
  38. return ;
  39. }

Hdu1286

Hdu1787线性筛O(n),MLE,怎么办?在线算

  1. int euler(int n){
  2. int ans=n;
  3. for(int i=;i*i<=n;i++){
  4. if(n%i==)n/=i,ans-=ans/i;
  5. while(n%i==)n/=i;
  6. }
  7. if(n>)ans-=ans/n;
  8. return ans;
  9. }

euler

AC code:

  1. #include <algorithm>
  2. #include <iostream>
  3. #include <cstring>
  4. #include <cstdlib>
  5. #include <cstdio>
  6. #include <vector>
  7. #include <cmath>
  8. #include <queue>
  9. #include <map>
  10. #include <set>
  11. using namespace std;
  12. #define file(x) freopen(x".in","r",stdin),freopen(x".out","w",stdout)
  13. inline bool read(int &ans){
  14. ans=;char x=getchar();int f=;
  15. while(x<''||x>''){if(x=='-')f=;x=getchar();}
  16. while(x>=''&&x<='')ans=ans*+x-'',x=getchar();
  17. if(f)ans=-ans;
  18. return !!ans;
  19. }
  20. /*
  21. const int maxn=(int)1e8+10;
  22. int phi[maxn],p[maxn],flag[maxn],cnt;
  23. void euler(int n){
  24. phi[1]=1;
  25. for(int i=2;i<=n;i++){
  26. if(!flag[i])p[++cnt]=i,phi[i]=i-1;
  27. for(int j=1;j<=cnt && i*p[j]<=n;j++){
  28. flag[i*p[j]]=1;
  29. if(i%p[j]==0){phi[i*p[j]]=phi[i]*p[j];break;}
  30. phi[i*p[j]]=phi[i]*(p[j]-1);
  31. }
  32. }
  33. }
  34. */
  35.  
  36. int euler(int n){
  37. int ans=n;
  38. for(int i=;i*i<=n;i++){
  39. if(n%i==)n/=i,ans-=ans/i;
  40. while(n%i==)n/=i;
  41. }
  42. if(n>)ans-=ans/n;
  43. return ans;
  44. }
  45.  
  46. int main(){
  47. //euler((int)1e8);cout<<euler(1)<<endl;
  48. for(int N;read(N);)printf("%d\n",N-euler(N)-);
  49. return ;
  50. }

Hdu1787

Hdu2824,sigma(a,b) phi(x)

  1. #include <algorithm>
  2. #include <iostream>
  3. #include <cstring>
  4. #include <cstdlib>
  5. #include <cstdio>
  6. #include <vector>
  7. #include <cmath>
  8. #include <queue>
  9. #include <map>
  10. #include <set>
  11. using namespace std;
  12.  
  13. typedef long long ll;
  14. const int maxn=(int)3e6+;
  15. ll phi[maxn];int p[maxn],cnt;bool flag[maxn];
  16. void euler(int n){
  17. phi[]=;
  18. for(int i=;i<=n;i++){
  19. if(!flag[i])p[++cnt]=i,phi[i]=i-;
  20. for(int j=;j<=cnt && i*p[j]<=n;j++){
  21. flag[i*p[j]]=;
  22. if(i%p[j]==){phi[i*p[j]]=phi[i]*p[j];break;}
  23. phi[i*p[j]]=phi[i]*(p[j]-);
  24. }
  25. }
  26. for(int i=;i<=n;i++)phi[i]+=phi[i-];
  27. }
  28.  
  29. int main(){
  30. euler((int)3e6);
  31. for(int a,b;scanf("%d%d",&a,&b)==;)printf("%lld\n",phi[b]-phi[a-]);
  32. return ;
  33. }

Hdu2824

线性筛-euler,强大O(n)的更多相关文章

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

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

  2. 线性筛-mobius,强大O(n)

    首先,你要知道什么是莫比乌斯函数 然后,你要知道什么是积性函数 最后,你最好知道什么是线性筛 莫比乌斯反演 积性函数 线性筛,见上一篇 知道了,就可以愉快的写mobius函数了 由定义: μ(n)= ...

  3. jzp线性筛及其简单应用

    前言: 很久以前看过了线性筛,没怎么注意原理,但是后来发现线性筛还有很有用的.. 比如上次做的一道题就需要找出每个数的最小质因子,先筛再找就太慢了..一看线性筛发现就可以直接在筛的过程中处理出来了! ...

  4. hdu_5750_Dertouzos(线性筛)

    题目连接:hdu_5750_Dertouzos 题意: 给你一个n,一个d,问你比n小的数中有多少个数的最大的因子为d,比如6有因子1 2 3 最大的为3 题解: 当时比赛做这题的时候没考虑常数的优化 ...

  5. Codeforces 822D My pretty girl Noora - 线性筛 - 动态规划

    In Pavlopolis University where Noora studies it was decided to hold beauty contest "Miss Pavlop ...

  6. bzoj 2820 YY的GCD - 莫比乌斯反演 - 线性筛

    Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对kAc这种 傻×必 ...

  7. 欧拉函数O(sqrt(n))与欧拉线性筛素数O(n)总结

    欧拉函数: 对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目. POJ 2407.Relatives-欧拉函数 代码O(sqrt(n)): ll euler(ll n){ ll ans=n; ...

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

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

  9. 【???】今天上午的考试题——区间dp和字符串/线性筛的综合应用

    T3还没有打出来,就先放两道. ---------------------------------------------------------- T1:密码破译 温温手下的情报部门截获了一封加密信 ...

随机推荐

  1. Spark学习之路 (三)Spark之RDD[转]

    RDD的概述 什么是RDD? RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变.可分区.里面的元素可并行计算的 ...

  2. brew 安装 yarn 时候失败

    1.mac 安装 brew install yarn 报错 Error: Failure while executing; `git config --local --replace-all home ...

  3. Luogu4316 | 绿豆蛙的归宿 (期望DP)

    题目背景 随着新版百度空间的上线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 题目描述 给出一个有向无环图,起点为1终点为N,每条边都有一个长度,并且从起点出发能够到达所有的点,所有的点也都 ...

  4. 【巨杉数据库SequoiaDB】巨杉Tech | 巨杉数据库数据高性能数据导入迁移实践

    SequoiaDB 一款自研金融级分布式数据库产品,支持标准SQL和分布式事务功能.支持复杂索引查询,兼容 MySQL.PGSQL.SparkSQL等SQL访问方式.SequoiaDB 在分布式存储功 ...

  5. [Python]jieba切词 添加字典 去除停用词、单字 python 2020.2.10

    源码如下: import jieba import io import re #jieba.load_userdict("E:/xinxi2.txt") patton=re.com ...

  6. Network Initialization: Fan-in and Fan-out

    https://github.com/pytorch/pytorch/blob/master/torch/nn/init.py @weak_script def _calculate_fan_in_a ...

  7. SVM-支持向量机(一)线性SVM分类

    SVM-支持向量机 SVM(Support Vector Machine)-支持向量机,是一个功能非常强大的机器学习模型,可以处理线性与非线性的分类.回归,甚至是异常检测.它也是机器学习中非常热门的算 ...

  8. IDEA构建maven项目生成的文件详解

    IDEA构建的maven+springBoot项目结构如下: 1. .gitignore:分布式版本控制系统git的配置文件,意思为忽略提交 在 .gitingore 文件中,遵循相应的语法,即在每一 ...

  9. python vs java Threadpool

    python 实现threadpool线程池管理: from concurrent.futures import ThreadPoolExecutor as te from concurrent.fu ...

  10. laravel多条件模糊查询

    1.运用cmd在项目根目录下创建路由组 php artisan make:controller queryController --resource 1.1数据库信息(student) CREATE ...