首页 > 代码库 > 欧拉函数模板
欧拉函数模板
转载 http://www.cnblogs.com/E-star/archive/2012/08/03/2621025.html
求欧拉函数的模板:
int euler(int n)//返回euler(n){ int i; int res = n,a = n; for(i = 2;i*i <= a; ++i) { if(a%i == 0) { res -= res/i; //p(n) = (p - p/p1)(1 - 1/p2)...... while(a%i == 0) a/=i; } } if(a > 1) res -= res/a;//存在大于sqrt(a)的质因子 return res;}
欧拉函数打表:
void SE()//select euler//类似于素数筛选法{ int i,j; euler[1] = 1; for(i = 2;i < Max; ++i) euler[i]=i; for(i = 2;i < Max; ++i) { if(euler[i] == i)//这里出现的肯定是素数 { for(j = i; j < Max; j += i)//然后更新含有它的数 { euler[j] = euler[j]/i*(i - 1); // n*(1 - 1/p1)....*(1 - 1/pk).先除后乘 } } } //for (int i = 1; i <= 20; ++i) printf("%d ",euler[i]);}
欧拉函数模板
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。