欧拉函数    ψ(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)的更多相关文章

  1. POJ2154 Color【 polya定理+欧拉函数优化】(三个例题)

    由于这是第一天去实现polya题,所以由易到难,先来个铺垫题(假设读者是看过课件的,不然可能会对有些“显然”的地方会看不懂): 一:POJ1286 Necklace of Beads :有三种颜色,问 ...

  2. HDU5780 gcd (BestCoder Round #85 E) 欧拉函数预处理——分块优化

    分析(官方题解): 一点感想: 首先上面那个等式成立,然后就是求枚举gcd算贡献就好了,枚举gcd当时赛场上写了一发O(nlogn)的反演,写完过了样例,想交发现结束了 吐槽自己手速慢,但是发了题解后 ...

  3. poj2409 & 2154 polya计数+欧拉函数优化

    这两个题都是项链珠子的染色问题 也是polya定理的最基本和最经典的应用之一 题目大意: 用m种颜色染n个珠子构成的项链,问最终形成的等价类有多少种 项链是一个环.通过旋转或者镜像对称都可以得到置换 ...

  4. 【洛谷】4917:天守阁的地板【欧拉函数的应用】【lcm与gcd】【同除根号优化】

    P4917 天守阁的地板 题目背景 在下克上异变中,博丽灵梦为了找到异变的源头,一路打到了天守阁 异变主谋鬼人正邪为了迎击,将天守阁反复颠倒过来,而年久失修的天守阁也因此掉下了很多块地板 异变结束后, ...

  5. [NOI2010][bzoj2005] 能量采集 [欧拉函数+分块前缀和优化]

    题面: 传送门 思路: 稍微转化一下,可以发现,每个植物到原点连线上植物的数量,等于gcd(x,y)-1,其中xy是植物的横纵坐标 那么我们实际上就是要求2*sigma(gcd(x,y))-n*m了 ...

  6. poj2154Color polya定理+欧拉函数优化

    没想到贱贱的数据居然是错的..搞得我调了一中午+晚上一小时(哦不d飞LJH掉RP毕竟他是BUFF)结果重判就对了五次.. 回归正题,这题傻子都看得出是polya定理(如果你不是傻子就看这里),还没有翻 ...

  7. POJ-2888 Magic Bracelet(Burnside引理+矩阵优化+欧拉函数+逆元)

    Burnside引理经典好题呀! 题解参考 https://blog.csdn.net/maxwei_wzj/article/details/73024349#commentBox 这位大佬的. 这题 ...

  8. poj3696 快速幂的优化+欧拉函数+gcd的优化+互质

    这题满满的黑科技orz 题意:给出L,要求求出最小的全部由8组成的数(eg: 8,88,888,8888,88888,.......),且这个数是L的倍数 sol:全部由8组成的数可以这样表示:((1 ...

  9. poj2154-color-polyan次二面体+欧拉函数优化

    N<=1e9,O(nlogn)的做法会超时.从枚举置换转变为枚举轮换长度,然后可以利用欧拉函数,把复杂度变为O(√n * logn) /*---------------------------- ...

随机推荐

  1. es6新增的math函数有哪些

    Math.trunc():用于去除一个数的小数部分,返回整数部分. Math.sign():用来判断一个数到底是正数.负数.还是零. Math.cbrt():用于计算一个数的立方根. Math.hyp ...

  2. Java操作FTP工具类(实例详解)

    这里使用Apache的FTP jar 包 没有使用Java自带的FTPjar包  工具类 package com.zit.ftp; import java.io.File; import java.i ...

  3. JDBC连接数据库:单线程、多线程、批处理插入数据的对比

    一.单线程(单条循环)插入50000条记录: 每执行一次就要访问一次数据库 import java.sql.Connection; import java.sql.DriverManager; imp ...

  4. JVM运行时内存区域

    JVM运行java程序时会将内存划分为若干个不同的数据区域: (1)程序计数器: 1.占用内存空间不大. 2.程序计数器相当于JVM所执行的字节码(jvm指令)的“行号指示器”,通过程序计数器的“值” ...

  5. 【转】MySQL实现Oracle里的 rank()over(ORDER BY) 功能

    Oracle rank()和dense_rank()的区别是: –rank()是跳跃排序,有两个第二名时接下来就是第四名 –dense_rank()l是连续排序,有两个第二名时仍然跟着第三名 sele ...

  6. pymongo 对mongoDB的操作

    #文档地址 http://api.mongodb.com/python/current/api/pymongo/collection.html collection级别的操作: find_and _m ...

  7. SQL-32 将employees表的所有员工的last_name和first_name拼接起来作为Name,中间以一个空格区分

    题目描述 将employees表的所有员工的last_name和first_name拼接起来作为Name,中间以一个空格区分CREATE TABLE `employees` ( `emp_no` in ...

  8. web项目与jsp有关的三个jar的依赖

    <!-- jsp --> <dependency> <groupId>javax.servlet</groupId> <artifactId> ...

  9. 4.Python爬虫入门四之Urllib库的高级用法

    1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性. 首先,打开我们的浏览 ...

  10. TensorFlow函数:tf.lin_space

    函数:tf.lin_space 别名: tf.lin_space tf.linspace lin_space( start, stop, num, name=None ) 参见指南:生成常量,序列和随 ...