您的位置:首页 > 其它

欧拉函数

2015-09-18 21:12 260 查看
欧拉函数的值 = 不超过m 并且 和m互质 的数的个数

/*
  求欧拉函数的值 O(sqrt(n))
*/
int euler_phi(int n){
    int res = n;
    for(int i = 2; i * i <= n; i++){
        if(n % i == 0){
            res = res / i * (i-1);
            for(; n % i == 0; n /= i);
        }
    }
    if(n != 1) res = res / n * (n-1);
    return res;
}
/*
  O(n)时间复杂度 筛出欧拉函数的表
*/
int euler[maxn];
void euler_phi2(){
    for(int i = 0; i < maxn; i++) euler[i] = i;
    for(int i = 2; i < maxn; i++){
        if(euler[i] == i){
            for(int j = i; j < maxn; j += i) euler[j] = euler[j]/i*(i-1);
        }
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: