欧拉函数的两种实现
来源:互联网 发布:ubuntu 分辨率不能调 编辑:程序博客网 时间:2024/04/29 01:21
欧拉函数的定义和性质:点击打开链接
1、求n的欧拉函数值
<span style="font-size:18px;">int Euler(int n){//求n的欧拉函数 O(n) int r = n;for(int i = 2;i <= n;i ++){if(n % i==0){while(n % i == 0)n/=i;r = r * (i-1 ) / i;}}return r;}</span>
2、求1~n的欧拉函数值
当n为素数是,n的欧拉函数值为n-1;
若n不是素数,则假设:
n = p1^r1 * p2^r2 * …… * pn^rn;
记n=n1*n2,其中
n1=p1^r1 * p2^r2 * …… * pi^ri;
n1=p(i+1)^r(i+1) * p(i+2)^r(i+2) * …… * pn^rn;
因为:若m,n互质, ;
所以:欧拉函数值(n) = 欧拉函数值(n1)*欧拉函数值(n2);
简单起见,令n1=p1^r1;
n2= p2^r2 * p3^r3 *…… * pn^rn;
实现如下
#define N 1000000int minP[N],o[N];//minP[]为最小素因子,o[]为欧拉函数值 void Euler(){//1~N之间每个数的欧拉函数 int a,b;o[1] = 1; //初始化minP[] for(int i = 2;i <= N;i ++){if(minP[i] == 0){//i为素数 for(int j=i*2;j <= N;j += i){if(minP[j]==0)minP[j] = i;}}}for(int i = 2;i <= N;i ++){if(minP[i]==0) {o[i] = i-1;}else{a = i / minP[i];b = minP[i];while(a% minP[i] == 0){a /= minP[i];b *= minP[i];}if(a == 1) o[i] = i / minP[i] * (minP[i] - 1);else o[i] = o[a]*o[b];}}}
0 0
- 欧拉函数的两种实现
- 欧拉函数及其两种程序实现
- 关于欧拉函数的两种求法
- 欧拉函数的两种基本写法
- 欧拉函数的C实现
- 欧拉函数的算法实现
- 欧拉函数代码实现
- 欧拉函数代码实现
- strcmp函数的两种实现
- strpbrk函数的两种实现
- 函数指针实现的两种方法
- strlen函数实现的两种方法
- 欧拉线性筛法求素数(顺便实现欧拉函数的求值)
- 欧拉线性筛法求素数(顺便实现欧拉函数的求值)
- 欧拉线性筛法求素数(顺便实现欧拉函数的求值)
- 在下拉列表框中显示多列的两种简易实现方式
- 微信小程序下拉刷新上拉加载的两种实现方法
- DrawerLayout侧拉菜单的两张实现方式
- Swift写简易计算器
- UVa 514 Rails
- 欢迎使用CSDN-markdown编辑器
- RPC Learn
- 前端开发学习笔记04---JavaScript
- 欧拉函数的两种实现
- android:paddingBottom=“@dimen/activity_horizontal_margin"的意思
- JavaScript之分之结构
- Java 的集合+IO
- 最大回文串
- Linus Torvalds依然对Linux的桌面充满信心
- 使用 Intel HAXM 为 Android 模拟器加速
- 初学JAVA关于设计一个倒立的正三角形
- ubuntu 获取root权限