欧拉函数 已经优化到o(n)
欧拉函数 ψ(x)=x*(1-1/pi) pi为x的质数因子
特殊性质(图片内容就是图片后面的文字)
欧拉函数是积性函数——若m,n互质,
ψ(m*n)=ψ(m)*ψ(n);
当n为奇数时,
ψ(2*n)=ψ(n);
若n为质数则
ψ(n)=n-1;
代码实现求欧拉函数 复杂度O(n*n) (有优化会补上)
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=;
bool prime[maxn];
int p[maxn]; // form 1 kaishi
int ou[maxn];
int cnt; // fan wei lei zhi shu ge shu
void build_prime(int n)
{
for(int i=;i<=n;i++) prime[i]=;
for(int i=;i<=n;i++)
{
if(prime[i]==) p[++cnt]=i;
for(int j=;j<=cnt && i*p[j]<=n;j++)
{
prime[i*p[j]]=;
if(i%p[j]==) break;
}
}
}
void build_oulahanshu(int n)
{
for(int i=;i<=n;i++)
{
int num=i;
int k=;
for(int j=;p[j]<=i && j<=cnt;j++)
{
if(i%p[j]==) num*=(p[j]-),k*=p[j];
}
ou[i]=num/k;
// cout<<"==="<<ou[i]<<endl;
}
}
int32_t main()
{
int n; cin>>n;
build_prime(n); cout<<cnt<<endl;
build_oulahanshu(n);
while(n--)
{
int x; cin>>x;
cout<<ou[x]<<endl;
}
}
O(n log n)
#include<bits/stdc++.h>
using namespace std;
#define Max 1000001
int euler[Max];
int main(){
euler[]=;
for(int i=;i<Max;i++)
euler[i]=i;
for(int i=;i<Max;i++)
if(euler[i]==i)
for(int j=i;j<Max;j+=i)
euler[j]=euler[j]/i*(i-);
for(int i=;i<=;i++)
{
cout<<euler[i]<<" ";
if( (i+)%== )cout<<endl;
} }
o(n)
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e7+;
int vis[maxn];
int prime[maxn];
int phi[maxn];
void euler(int n)
{
memset(vis,,sizeof(vis));
int tot=;
phi[1]=1;
for(int i=;i<=n;i++)
{
if(vis[i]==)
{
vis[i]=i;
prime[++tot]=i; // su shu hai
phi[i]=i-; // su shu de xian chu li
}
for(int j=;j<=tot && prime[j]*i<n;j++)
{
if(prime[j]>vis[i] )
{
// 超出n的范围 或者 i有比prime[j]更小的质因子;
break;
}
// prime[j]是i*prime[j]的最小质因子
vis[i*prime[j]]=prime[j];
// phi[i*prime[j]]=phi[i]*( i%prime[j]?prime[j]-1:prime[j]);
if( i%prime[j])
phi[i*prime[j]]=phi[i]*(prime[j]-);
else
phi[i*prime[j]]=phi[i]*prime[j]; }
}
}
int main()
{
int n=1e7+;
euler(n);
cout<<phi[]<<endl;
}
欧拉函数 已经优化到o(n)的更多相关文章
- POJ2154 Color【 polya定理+欧拉函数优化】(三个例题)
由于这是第一天去实现polya题,所以由易到难,先来个铺垫题(假设读者是看过课件的,不然可能会对有些“显然”的地方会看不懂): 一:POJ1286 Necklace of Beads :有三种颜色,问 ...
- HDU5780 gcd (BestCoder Round #85 E) 欧拉函数预处理——分块优化
分析(官方题解): 一点感想: 首先上面那个等式成立,然后就是求枚举gcd算贡献就好了,枚举gcd当时赛场上写了一发O(nlogn)的反演,写完过了样例,想交发现结束了 吐槽自己手速慢,但是发了题解后 ...
- poj2409 & 2154 polya计数+欧拉函数优化
这两个题都是项链珠子的染色问题 也是polya定理的最基本和最经典的应用之一 题目大意: 用m种颜色染n个珠子构成的项链,问最终形成的等价类有多少种 项链是一个环.通过旋转或者镜像对称都可以得到置换 ...
- 【洛谷】4917:天守阁的地板【欧拉函数的应用】【lcm与gcd】【同除根号优化】
P4917 天守阁的地板 题目背景 在下克上异变中,博丽灵梦为了找到异变的源头,一路打到了天守阁 异变主谋鬼人正邪为了迎击,将天守阁反复颠倒过来,而年久失修的天守阁也因此掉下了很多块地板 异变结束后, ...
- [NOI2010][bzoj2005] 能量采集 [欧拉函数+分块前缀和优化]
题面: 传送门 思路: 稍微转化一下,可以发现,每个植物到原点连线上植物的数量,等于gcd(x,y)-1,其中xy是植物的横纵坐标 那么我们实际上就是要求2*sigma(gcd(x,y))-n*m了 ...
- poj2154Color polya定理+欧拉函数优化
没想到贱贱的数据居然是错的..搞得我调了一中午+晚上一小时(哦不d飞LJH掉RP毕竟他是BUFF)结果重判就对了五次.. 回归正题,这题傻子都看得出是polya定理(如果你不是傻子就看这里),还没有翻 ...
- POJ-2888 Magic Bracelet(Burnside引理+矩阵优化+欧拉函数+逆元)
Burnside引理经典好题呀! 题解参考 https://blog.csdn.net/maxwei_wzj/article/details/73024349#commentBox 这位大佬的. 这题 ...
- poj3696 快速幂的优化+欧拉函数+gcd的优化+互质
这题满满的黑科技orz 题意:给出L,要求求出最小的全部由8组成的数(eg: 8,88,888,8888,88888,.......),且这个数是L的倍数 sol:全部由8组成的数可以这样表示:((1 ...
- poj2154-color-polyan次二面体+欧拉函数优化
N<=1e9,O(nlogn)的做法会超时.从枚举置换转变为枚举轮换长度,然后可以利用欧拉函数,把复杂度变为O(√n * logn) /*---------------------------- ...
随机推荐
- 3.python函数编程-reduce函数
reduce将所有数据压缩到一起,得到一个最终的结果. 在python2中可以直接使用,在python3中需要导入 from functools import reduce 自己实现代码: num = ...
- Linux command parted
Linux command parted [Purpose] Learning linux command parted to manipulate disk partitions ...
- learning at command AT+CSQ
AT command AT+CSQ [Purpose] Learning how to get mobile module single quality report [Eeviro ...
- 服务消费和负载(Feign)
Spring Cloud Feign Spring Cloud Feign是一套基于Netflix Feign实现的声明式服务调用客户端.它使得编写Web服务客户端变得更加简单.我们只需要通过创建接口 ...
- python 学习笔记 字符串和编码
字符编码:因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理,最早的计算机在设计时采用8个比特(bit)作为一个字节 (byte),所以,一个字节能表示的最大的整数是255(二进 ...
- Java:将Excel数据导入到数据库(一眼就看会)
所用Jar包 1. sqljdbc4.jar 连接数据库的Jar包(根据数据库的不同进行选择,我用的SqlServer2008) 2.Jxl.jar 访问Excel的Jar包 注意:支持以.xls结尾 ...
- 图解中序遍历线索化二叉树,中序线索二叉树遍历,C\C++描述
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- vue-6-事件处理
<div id="example-2"> <button v-on:click="greet">Greet</button> ...
- Cracking The Coding Interview4.3
//Given a sorted (increasing order) array, write an algorithm to create a binary tree with minimal h ...
- idea自动生成serialVersionUID(转)
原文链接:http://blog.sina.com.cn/s/blog_54b09dc90101d9bu.html Setting->Plugins 找到一个叫 GenerateSerialV ...