欧拉函数
2015-09-25 15:25
357 查看
#include <stdio.h> #include <ctype.h> #include <string.h> #include <stdlib.h> #include <limits.h> #include <math.h> #include <algorithm> #include <stack> #include <queue> #include <vector> #include <map> #include <set> #include <string> #include <sstream> using namespace std; #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 typedef long long LL; const double pi=4.0*atan(1.0); const int MAXN=100005; //欧拉函数是求小于x并且和x互质的数的个数 // Euler函数表达通式:euler(x)=x(1-1/p1)(1-1/p2)(1-1/p3)(1-1/p4)…(1-1/pn),其中p1,p2……pn为x的所有素因数,x是不为0的整数。 //euler(1)=1(唯一和1互质的数就是1本身)。 //欧拉公式的延伸:小于N与N互质的数和euler(n)*n/2。 //欧拉函数是指:对于一个正整数n,小于n且和n互质的正整数(包括1)的个数,记作φ(n) 。 //通式:φ(x)=x*(1-1/p1)*(1-1/p2)*(1-1/p3)*(1-1/p4)…..(1-1/pn),其中p1, p2……pn为x的所有质因数,x是不为0的整数。φ(1)=1(唯一和1互质的数就是1本身)。 //对于质数p,φ(p) = p - 1。注意φ(1)=1. //欧拉定理:对于互质的正整数a和n,有aφ(n) ≡ 1 mod n。 //欧拉函数是积性函数——若m,n互质,φ(mn)=φ(m)φ(n)。 //若n是质数p的k次幂,φ(n)=p^k-p^(k-1)=(p-1)p^(k-1),因为除了p的倍数外,其他数都跟n互质。 //特殊性质:当n为奇数时,φ(2n)=φ(n) //欧拉函数还有这样的性质: //设a为N的质因数,若(N % a == 0 && (N / a) % a == 0) 则有E(N)=E(N / a) * a;若(N % a == 0 && (N / a) % a != 0) 则有:E(N) = E(N / a) * (a - 1)。 int euler_phi(int n) { int ans=n; for(int i=2;i*i<=n;i++) { if(n%i==0) { ans=ans/i*(i-1); while(n%i==0) n/=i; } } if(n>1) ans=ans/n*(n-1); return ans; } int phi[MAXN]; void phi_table(int n) { for(int i=0;i<=n;i++) phi[i]=i; for(int i=2;i<=n;i++) if(phi[i]==i) for(int j=i;j<=n;j+=i) phi[j]=phi[j]/i*(i-1); } int main() { int T; int n; //phi_table(40000); while(scanf("%d",&T)!=EOF) { while(T--) { scanf("%d",&n); printf("%d\n",euler_phi(n)); } } return 0; }
相关文章推荐
- 开发中比较有用的几个OnLine Web
- 动态规划
- 【工作记录】:2015-7到2015-9的工作记录
- CocoaPods安装
- linux下mycat读写分离的配置
- PHP计算程序运行时间的类
- 安装MySql出现Write configuration file的出错原因
- PHP生成随机字符串(3种方法)
- iOS求生之路二(点击segment管理tableView)
- 关系型数据库与NOSQL
- Ios 关于Block循环引用的面试题
- 使用Xcode无法发布程序(Archive按钮一直为灰色不可点击)
- Swift - 解析JSON数据(内置NSJSONSerialization与第三方JSONKit)
- oracle 创建表空间
- 设计模式:单例模式(Singleton Pattern)
- Java日志管理规范
- iOS项目开发实战——UIView的子视图和父视图
- Test7.10
- Oracle查询服务器执行语句
- uva 1632 动规