欧拉函数
来源:互联网 发布:举报网络博客 编辑:程序博客网 时间:2024/06/16 08:31
欧拉函数φ(n),表示小于等于n的数中与n互质的数的数目(phi(1) = 1)
φ(12) = 12 - 12/2 - 12/3 + 12/(2*3) 即减去12的质因数的倍数的个数
有一种简单的方法φ(12) = 12*(1 - 1/2)*(1 - 1/3)
所以计算φ(n)的方法就是先找出n的质因数
#include <stdio.h>#include <math.h>int prime[100000];int Oula(int x){ int i,res=x; for(i=2;i<(int)sqrt(x*1.0)+1;i++) if(x%i==0) { res=res/i*(i-1); while(x%i==0) x/=i; } if(x>1) res=res/x*(x-1); return res;}int main(){ //10 2,5 printf("%d",Oula(10));//1,3,7,9}
求n个数的欧拉函数。
#include <iostream>#include <cstdio>#include <cmath>using namespace std;#define ll long long#define N 3000001ll phi[N];void init(){ for(int i=1;i<N;i++) phi[i]=i; for(int i=2;i<N;i++) if(i==phi[i]) for(int j=i;j<N;j+=i) phi[j]=(phi[j]/i)*(i-1);//j有因子i,而且i是素数,正是欧拉函数}int main(){ init(); int a,b; while(~scanf("%d%d",&a,&b)) { ll ans=0; for(int i=a;i<=b;i++) ans+=phi[i]; printf("%lld\n",ans); } return 0;}
更快的方法。。。(转自镜外之主)
p为质数
1. phi(p)=p-1 因为质数p除了1以外的因数只有p,故1至p的整数只有p与p不互质
2. 如果i mod p = 0, 那么 phi(i * p)=phi(i) * p
3.若i mod p ≠0, 那么 phi( i * p )=phi(i) * ( p-1 )
#include<cstdio>using namespace std;const int N = 1e6+10 ;int phi[N], prime[N];int tot;//tot计数,表示prime[N]中有多少质数 void Euler(){ phi[1] = 1; for(int i = 2; i < N; i ++){ if(!phi[i]){ phi[i] = i-1; prime[tot ++] = i; } for(int j = 0; j < tot && 1ll*i*prime[j] < N; j ++){ if(i % prime[j]) phi[i * prime[j]] = phi[i] * (prime[j]-1); else{ phi[i * prime[j] ] = phi[i] * prime[j]; break; } } }} int main(){ Euler();}
0 0
- 欧拉函数
- 欧拉函数
- Relatives 【欧拉函数】
- 欧拉函数
- POJ_2407_欧拉函数
- 欧拉函数
- hdu_3501_欧拉函数
- 欧拉函数
- 欧拉函数
- 欧拉函数
- 欧拉函数
- 欧拉函数
- 欧拉函数
- 欧拉函数应用
- 欧拉函数
- 欧拉函数
- 欧拉函数
- ACM-欧拉函数
- Faster-rcnn训练自己的数据库
- 浅析人脸检测之Haar分类器方法:Haar特征、积分图、 AdaBoost 、级联
- 萤火虫之歌
- kmp-KMP入门必做-匹配
- 一图秒懂P2P、P2C 、O2O 、B2C、B2B、C2C
- 欧拉函数
- 第1章 错误处理
- 越是孤独,就越是要坚持
- linux下运行命令javac和java,多个依赖包的情况
- vector 简介
- 很久前Oracle的一些笔记_1-3
- Codevs P1052 地鼠游戏
- 准备做个魔镜(树莓派+HTK(或者Kaldi)+Opencv+apache)
- codeforces D. Mishka and Interesting sum 求区间内不同数的异或值