线性筛-euler,强大O(n)
欧拉函数是少于或等于n的数中与n互质的数的数目
φ(1)=1(定义)
类似与莫比乌斯函数,基于欧拉函数的积性
φ(xy)=φ(x)φ(y)
由唯一分解定理展开显然,得证
精髓在于对于积性的应用:
- if(i%p[j]==){phi[i*p[j]]=phi[i]*p[j];break;}
- phi[i*p[j]]=phi[i]*(p[j]-);
一个练手题Hdu1286
- #include <algorithm>
- #include <iostream>
- #include <cstring>
- #include <cstdlib>
- #include <cstdio>
- #include <vector>
- #include <cmath>
- #include <queue>
- #include <map>
- #include <set>
- using namespace std;
- #define file(x) freopen(x".in","r",stdin),freopen(x".out","w",stdout)
- inline void read(int &ans){
- ans=;char x=getchar();int f=;
- while(x<''||x>''){if(x=='-')f=;x=getchar();}
- while(x>=''&&x<='')ans=ans*+x-'',x=getchar();
- if(f)ans=-ans;
- }
- const int maxn=+;
- int phi[maxn],p[maxn],flag[maxn],cnt;
- void euler(int n){
- phi[]=;
- for(int i=;i<=n;i++){
- if(!flag[i])p[++cnt]=i,phi[i]=i-;
- for(int j=;j<=cnt && i*p[j]<=n;j++){
- flag[i*p[j]]=;
- if(i%p[j]==){phi[i*p[j]]=phi[i]*p[j];break;}
- phi[i*p[j]]=phi[i]*(p[j]-);
- }
- }
- }
- int main(){
- euler();
- int CN,N;
- for(read(CN);CN--;)read(N),printf("%d\n",phi[N]);
- return ;
- }
Hdu1286
Hdu1787线性筛O(n),MLE,怎么办?在线算
- int euler(int n){
- int ans=n;
- for(int i=;i*i<=n;i++){
- if(n%i==)n/=i,ans-=ans/i;
- while(n%i==)n/=i;
- }
- if(n>)ans-=ans/n;
- return ans;
- }
euler
AC code:
- #include <algorithm>
- #include <iostream>
- #include <cstring>
- #include <cstdlib>
- #include <cstdio>
- #include <vector>
- #include <cmath>
- #include <queue>
- #include <map>
- #include <set>
- using namespace std;
- #define file(x) freopen(x".in","r",stdin),freopen(x".out","w",stdout)
- inline bool read(int &ans){
- ans=;char x=getchar();int f=;
- while(x<''||x>''){if(x=='-')f=;x=getchar();}
- while(x>=''&&x<='')ans=ans*+x-'',x=getchar();
- if(f)ans=-ans;
- return !!ans;
- }
- /*
- const int maxn=(int)1e8+10;
- int phi[maxn],p[maxn],flag[maxn],cnt;
- void euler(int n){
- phi[1]=1;
- for(int i=2;i<=n;i++){
- if(!flag[i])p[++cnt]=i,phi[i]=i-1;
- for(int j=1;j<=cnt && i*p[j]<=n;j++){
- flag[i*p[j]]=1;
- if(i%p[j]==0){phi[i*p[j]]=phi[i]*p[j];break;}
- phi[i*p[j]]=phi[i]*(p[j]-1);
- }
- }
- }
- */
- int euler(int n){
- int ans=n;
- for(int i=;i*i<=n;i++){
- if(n%i==)n/=i,ans-=ans/i;
- while(n%i==)n/=i;
- }
- if(n>)ans-=ans/n;
- return ans;
- }
- int main(){
- //euler((int)1e8);cout<<euler(1)<<endl;
- for(int N;read(N);)printf("%d\n",N-euler(N)-);
- return ;
- }
Hdu1787
Hdu2824,sigma(a,b) phi(x)
- #include <algorithm>
- #include <iostream>
- #include <cstring>
- #include <cstdlib>
- #include <cstdio>
- #include <vector>
- #include <cmath>
- #include <queue>
- #include <map>
- #include <set>
- using namespace std;
- typedef long long ll;
- const int maxn=(int)3e6+;
- ll phi[maxn];int p[maxn],cnt;bool flag[maxn];
- void euler(int n){
- phi[]=;
- for(int i=;i<=n;i++){
- if(!flag[i])p[++cnt]=i,phi[i]=i-;
- for(int j=;j<=cnt && i*p[j]<=n;j++){
- flag[i*p[j]]=;
- if(i%p[j]==){phi[i*p[j]]=phi[i]*p[j];break;}
- phi[i*p[j]]=phi[i]*(p[j]-);
- }
- }
- for(int i=;i<=n;i++)phi[i]+=phi[i-];
- }
- int main(){
- euler((int)3e6);
- for(int a,b;scanf("%d%d",&a,&b)==;)printf("%lld\n",phi[b]-phi[a-]);
- return ;
- }
Hdu2824
线性筛-euler,强大O(n)的更多相关文章
- The Euler function(线性筛欧拉函数)
/* 题意:(n)表示小于n与n互质的数有多少个,给你两个数a,b让你计算a+(a+1)+(a+2)+......+b; 初步思路:暴力搞一下,打表 #放弃:打了十几分钟没打完 #改进:欧拉函数:具体 ...
- 线性筛-mobius,强大O(n)
首先,你要知道什么是莫比乌斯函数 然后,你要知道什么是积性函数 最后,你最好知道什么是线性筛 莫比乌斯反演 积性函数 线性筛,见上一篇 知道了,就可以愉快的写mobius函数了 由定义: μ(n)= ...
- jzp线性筛及其简单应用
前言: 很久以前看过了线性筛,没怎么注意原理,但是后来发现线性筛还有很有用的.. 比如上次做的一道题就需要找出每个数的最小质因子,先筛再找就太慢了..一看线性筛发现就可以直接在筛的过程中处理出来了! ...
- hdu_5750_Dertouzos(线性筛)
题目连接:hdu_5750_Dertouzos 题意: 给你一个n,一个d,问你比n小的数中有多少个数的最大的因子为d,比如6有因子1 2 3 最大的为3 题解: 当时比赛做这题的时候没考虑常数的优化 ...
- Codeforces 822D My pretty girl Noora - 线性筛 - 动态规划
In Pavlopolis University where Noora studies it was decided to hold beauty contest "Miss Pavlop ...
- bzoj 2820 YY的GCD - 莫比乌斯反演 - 线性筛
Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对kAc这种 傻×必 ...
- 欧拉函数O(sqrt(n))与欧拉线性筛素数O(n)总结
欧拉函数: 对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目. POJ 2407.Relatives-欧拉函数 代码O(sqrt(n)): ll euler(ll n){ ll ans=n; ...
- 积性函数&线性筛&欧拉函数&莫比乌斯函数&因数个数&约数个数和
只会搬运YL巨巨的博客 积性函数 定义 积性函数:对于任意互质的整数a和b有性质f(ab)=f(a)f(b)的数论函数. 完全积性函数:对于任意整数a和b有性质f(ab)=f(a)f(b)的数论函数 ...
- 【???】今天上午的考试题——区间dp和字符串/线性筛的综合应用
T3还没有打出来,就先放两道. ---------------------------------------------------------- T1:密码破译 温温手下的情报部门截获了一封加密信 ...
随机推荐
- Spark学习之路 (三)Spark之RDD[转]
RDD的概述 什么是RDD? RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变.可分区.里面的元素可并行计算的 ...
- brew 安装 yarn 时候失败
1.mac 安装 brew install yarn 报错 Error: Failure while executing; `git config --local --replace-all home ...
- Luogu4316 | 绿豆蛙的归宿 (期望DP)
题目背景 随着新版百度空间的上线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 题目描述 给出一个有向无环图,起点为1终点为N,每条边都有一个长度,并且从起点出发能够到达所有的点,所有的点也都 ...
- 【巨杉数据库SequoiaDB】巨杉Tech | 巨杉数据库数据高性能数据导入迁移实践
SequoiaDB 一款自研金融级分布式数据库产品,支持标准SQL和分布式事务功能.支持复杂索引查询,兼容 MySQL.PGSQL.SparkSQL等SQL访问方式.SequoiaDB 在分布式存储功 ...
- [Python]jieba切词 添加字典 去除停用词、单字 python 2020.2.10
源码如下: import jieba import io import re #jieba.load_userdict("E:/xinxi2.txt") patton=re.com ...
- 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 ...
- SVM-支持向量机(一)线性SVM分类
SVM-支持向量机 SVM(Support Vector Machine)-支持向量机,是一个功能非常强大的机器学习模型,可以处理线性与非线性的分类.回归,甚至是异常检测.它也是机器学习中非常热门的算 ...
- IDEA构建maven项目生成的文件详解
IDEA构建的maven+springBoot项目结构如下: 1. .gitignore:分布式版本控制系统git的配置文件,意思为忽略提交 在 .gitingore 文件中,遵循相应的语法,即在每一 ...
- python vs java Threadpool
python 实现threadpool线程池管理: from concurrent.futures import ThreadPoolExecutor as te from concurrent.fu ...
- laravel多条件模糊查询
1.运用cmd在项目根目录下创建路由组 php artisan make:controller queryController --resource 1.1数据库信息(student) CREATE ...