欧拉函数

来源:互联网 发布:win8.1一键优化工具 编辑:程序博客网 时间:2024/06/17 02:37

欧拉函数:从1开始到n与n互质的数的个数(没要求是其因子)。

单次求欧拉函数的O(根号N)做法

int phi(int x){    int ans = x;    for(int i = 2; i*i <= x; i++){        if(x % i == 0){            ans = ans / i * (i-1);            while(x % i == 0) x /= i;        }    }    if(x > 1) ans = ans / x * (x-1);    return ans;}

筛出一个表出来

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;            }        }    }}





原创粉丝点击