【欧拉函数】

本文介绍了欧拉函数的基本概念,定义为小于等于n且与n互素的整数个数。接着提供了两种计算模板,一是求解单个数x的欧拉函数值,时间复杂度为O(sqrt(x));二是计算[1, maxn]区间内所有数的欧拉函数值,时间复杂度为O(n*ln(n))。" 133072581,10641549,PyQt 中 Qt Designer 的 toolBar 和 toolButtonStyle 属性详解,"['PyQt', 'GUI设计', 'Qt框架', '界面定制', '桌面应用开发']

1.1欧拉函数定义
首先,需要理解一下什么是欧拉函数,欧拉函数phi(n)的定义为小于等于n且与n互素的整数个数。那么什么是互素呢?互素是指对于两个数a和b,a和b的最大公约数为1(即gcd(a, b) = 1);
1.21模板-求解数x的欧拉函数(时间复杂度O(sqrt(x)))

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

1.22模板-求解[1, maxn]区间内所有数的欧拉函数值(时间复杂度O(n*ln(n)))



int phi[1001400];/*数i的欧拉函数值*/
int tp, link[1001400];/*数i是素数 <=> 数i的欧拉函数值等于i-1*/

void Phi(int maxn);/*求解[1, n]区间内所有数的欧拉函数值*/

void Phi(int maxn){
    tp = 0;
    for(int i = 1; i <= maxn; i++)
        phi[i] = i;
    for(int i = 2; i <= maxn; i += 2)
        phi[i] /= 2;
    link[tp++] = 2;
    for(int i = 3; i <= maxn; i += 2){
        if(phi[i] == i){
            for(int j = i; j <= maxn; j += i)
                phi[j] = phi[j]/i * (i-1);
        }
        if(phi[i] == i-1)
            link[tp++] = i;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值