hdu找新朋友 欧拉函数
来源:互联网 发布:ipad找不到蜂窝数据 编辑:程序博客网 时间:2024/05/16 18:53
题目不多说了,看了一会用了最弱智的暴力求解果然TLE了,最后上网查了一下正确解法是欧拉函数,下面就简单的总结一下欧拉函数。
欧拉函数:在数论,对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目。此函数以其首名研究者欧拉命名,它又称为Euler's totient function、φ函数、欧拉商数等。
它的一般计算式是:phi(n) = n*(1-1/p1)*(1-1/p2)*...*(1-1/pk),其中p1...pk为n的所有质因子。
关于欧拉函数有如下几点性质:
1、phi(1) = 1
2、若n是质数,那么phi(n) = n-1
3、若n是质数x的k次幂,phi(n) = (x-1)*x^(k-1)
4、若m,n互质,那么phi(m*n) = phi(m)*phi(n)
5、若n是奇数,那么phi(2*n) = phi(n)
6、若x,y是质数,且n = x*y,那么phi(n) = (x-1)*(y-1)
7、小于n且与n互质的数的和为:n/2 * phi(n)
那么给出两种求解欧拉函数的方法:
//直接求解欧拉函数int euler(int n){ //返回euler(n) int res=n,a=n; for(int i=2;i*i<=a;i++){ if(a%i==0){ res=res/i*(i-1);//先进行除法是为了防止中间数据的溢出 while(a%i==0) a/=i; } } if(a>1) res=res/a*(a-1); return res;}//筛选法打欧拉函数表 #define Max 1000001int euler[Max];void Init(){ euler[1]=1; for(int i=2;i<Max;i++) euler[i]=i; for(int i=2;i<Max;i++) if(euler[i]==i) for(int j=i;j<Max;j+=i) euler[j]=euler[j]/i*(i-1);//先进行除法是为了防止中间数据的溢出 }
0 0
- hdu找新朋友 欧拉函数
- hdu 1286 找新朋友(欧拉函数)
- hdu 1286 找新朋友(欧拉函数)
- hdu 1286 找新朋友(欧拉函数)
- [ACM] hdu 1286 找新朋友(欧拉函数)
- hdu 1286 找新朋友 (欧拉函数)
- HDU 1286 找新朋友(欧拉函数模板)
- 【欧拉函数】hdu 1286 找新朋友
- hdu 1286 找新朋友(欧拉函数)
- HDU 1286 找新朋友(欧拉函数)
- HDU 1286 找新朋友【欧拉函数】
- HDU ACM 1286-找新朋友-欧拉phi函数
- hdu 1286 找新朋友(欧拉函数)
- HDU 1286 找新朋友 (欧拉函数)
- HDU 1286 找新朋友(数学 欧拉函数)
- HDU 1286:找新朋友【欧拉函数】
- 找新朋友 HDU杭电1286 【欧拉函数】
- HDU 1286 找新朋友(欧拉函数)
- eclipse每次启动需要重新设置字号办法
- 关于H3 BPM数据库如何实现排序取数据的问题
- Nginx(Https) + Tomcat 启用 Https(SSL) 支持
- 区块链技术进阶
- java静态代码块和静态方法的区别和调用顺序、static用法
- hdu找新朋友 欧拉函数
- dubbo框架
- git clean
- Beyond Compare怎么备份文件到指定文件夹
- Python-003-数据类型1--数字、字符串、布尔值
- 基础练习:报时助手
- Track all remote git branches as local branches
- spring和springmvc的区别
- Android 获得安装应用列表