欧拉函数 已经优化到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) /*---------------------------- ...
随机推荐
- javascript void函数
<a href="javascript:doTest2();void(0);">here</a> 但这儿的void(0)究竟是何含义呢? Javascrip ...
- Win10系列:UWP界面布局进阶5
提示框 在Windows应用商店应用程序中可以使用提示框来向用户显示提示信息,例如可以通过对话框来询问用户当前需要执行的操作,还可以通过弹出窗口来显示需要注意的信息.本节将向读者介绍如何在Window ...
- Spring注入,Ioc的具体配置
Spring框架的IOC注入: 一.Java部分代码: Person实体类: package com.ioc; import java.util.List; import java.util.Map; ...
- RegDataToDataType
function RegDataToDataType(Value: TRegDataType): Integer; begin case Value of rdString: Result := RE ...
- 在docker hub,用github的dockerfile自动生成docker镜像
简介: 我已经深深的爱上了docker技术. 在日常使用中,经常看到docker hub 中有很多autobuild的镜像.基本使用是在github中上传dockerfile,过一会儿,docker ...
- java 实现简单的顺序队列
package com.my; import java.util.Arrays; /** * 顺序队列 * @author wanjn * */ public class ArrayQueue { p ...
- caffe,Inception v2 Check failed: top_shape[j] == bottom[i]->shape(j)
使用Caffe 跑 Google 的Inception V2 对输入图片的shape有要求,某些shape输进去可能会报错. Inception model中有从conv和pooling层concat ...
- NIO完成网络通信(一)
NIO:即非阻塞式IO 视频教程: https://chuanke.baidu.com/v1982732-211322-1316084.html 使用步骤: 1.创建 ServerSocketCha ...
- oracle数据导入导出数据与编码格式不正确
1.导入dmp文件 imp ZHCG/ZHCG@ORCL file=E:\20160902.1007.dmp full=y 2.导出数据 exp system/manager@ORCL file ...
- 2.14 C++析构函数
参考: http://www.weixueyuan.net/view/6345.html 总结: 析构函数就是用于回收创建对象时所消耗的各种资源. 析构函数的调用顺序与构造函数调用顺序正好是相反的. ...