定理定理定理

本文深入探讨欧拉函数的定义、欧拉函数公式、容斥原理的应用,以及如何通过筛法和欧拉定理求解。实例演示了计算欧拉函数的代码,并介绍欧拉定理在数学和计算机科学中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

威尔逊定理在写了在写了

互质

​ 对于任意的自然数 a , b a,b a,b 若有 g c d ( a , b ) = 1 gcd(a,b)=1 gcd(a,b)=1,则说 a , b a,b a,b 互为质数。

欧拉函数(容斥定理)

解析

一、欧拉函数

​ 欧拉函数 φ ( n ) \varphi(n) φ(n),指的是 1 ∼ n 1\sim n 1n 中与 n n n 互质的数的个数。 φ ( 6 ) = 2 \varphi(6)=2 φ(6)=2

​ 欧拉函数存在一个公式,这个公式同样要使用之前的算数基本定理。
N = p 1 α 1 p 2 α 2 ⋯ p k α k N=p_1^{\alpha_1}p_2^{\alpha_2}\cdots p_k^{\alpha_k} N=p1α1p2α2pkαk

φ ( N ) = N ( 1 − 1 p 1 ) ( 1 − 1 p 2 ) ⋯ ( 1 − 1 p k ) \varphi(N)=N(1-\frac{1}{p_1})(1-\frac{1}{p_2})\cdots(1-\frac{1}{p_k}) φ(N)=N(1p11)(1p21)(1pk1)

φ ( 6 ) = 6 ( 1 − 1 2 ) ( 1 − 1 3 ) = 2 \varphi(6)=6(1-\frac{1}{2})(1-\frac{1}{3})=2 φ(6)=6(121)(131)=2

二、求解

​ 这里使用了容斥原理,

(1)从 1 ∼ N 1\sim N 1N 中去除 p 1 , p 2 , ⋯   , p k p_1,p_2,\cdots,p_k p1,p2,,pk 的所有倍数。

(2)加上所有 p i ∗ p j p_i*p_j pipj 的倍数。

(3)减去所有 p i ∗ p j ∗ p k p_i*p_j*p_k pipjpk 的倍数。

(4) ⋯ \cdots

​ 使用公式表现为。
φ ( n ) = N − N p 1 − N p 2 − ⋯ − N p k + N p 1 p 2 + N p 1 p 3 + ⋯ + N p k − 1 p k − N p 1 p 2 p 3 − N p 1 p 2 p 4 − ⋯ − N p k − 2 p k − 1 p k ⋯ ⋯ \begin{aligned} \varphi(n)=& N-\frac{N}{p_1}-\frac{N}{p_2}-\cdots-\frac{N}{p_k}\\ & +\frac{N}{p_1p_2}+\frac{N}{p_1p_3}+\cdots+\frac{N}{p_{k-1}p_k}\\ & -\frac{N}{p_1p_2p_3}-\frac{N}{p_1p_2p_4}-\cdots-\frac{N}{p_{k-2}p_{k-1}p_k}\\ & \cdots\cdots \end{aligned} φ(n)=Np1Np2NpkN+p1p2N+p1p3N++pk1pkNp1p2p3Np1p2p4Npk2pk1pkN
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-taUXDWqi-1652423268318)(C:/Users/李俊霖/AppData/Roaming/Typora/typora-user-images/image-20220509193744870.png)]

模板

int phi(int x){
    int res=x;
    for(int i=2;i<=x/i;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;
}

例题

873. 欧拉函数 - AcWing题库

#include <iostream>
using namespace std;
int t,n;
int phi(int x){
    int res=x;
    for(int i=2;i<=x/i;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;
}
void slove(){
    cin>>n;
    cout<<phi(n)<<endl;
}
int main(){
    cin>>t;
    while(t--)slove();
    return 0;
}

筛法求欧拉函数

解析

​ 筛法求欧拉函数是在线性筛质数的过程中可以顺带完成的。

模板

void get_eulers(int n){
    euler[1]=1;
    for(int i=2;i<=n;i++){
        if(!st[i]){
            primes[cnt++]=i;
            euler[i]=i-1;
        }
        for(int j=0;primes[j]<=n/i;j++){
            int t=primes[j]*i;
            st[t]=true;
            if(i%primes[j]==0){
                euler[t]=euler[i]*primes[j];
                break;
            }
            euler[t]=euler[i]*(primes[j]-1);
        }
    }
}

例题

874. 筛法求欧拉函数 - AcWing题库

#include <iostream>
using namespace std;
typedef long long LL;
const int N=1e6+10;
int primes[N],cnt,euler[N],n;
bool st[N];
void get_eulers(int n){
    euler[1]=1;
    for(int i=2;i<=n;i++){
        if(!st[i]){
            primes[cnt++]=i;
            euler[i]=i-1;
        }
        for(int j=0;primes[j]<=n/i;j++){
            int t=primes[j]*i;
            st[t]=true;
            if(i%primes[j]==0){
                euler[t]=euler[i]*primes[j];
                break;
            }
            euler[t]=euler[i]*(primes[j]-1);
        }
    }
}
int main(){
    cin>>n;
    get_eulers(n);
    LL res=0;
    for(int i=1;i<=n;i++)res+=euler[i];
    cout<<res<<endl;
    return 0;
}

欧拉定理

解析

一、定义

​ 欧拉定理,若 a a a n n n 互质,则 a φ ( n ) ≡ 1 ( m o d   n ) a^{\varphi(n)}\equiv1(mod\ n) aφ(n)1(mod n) a = 5 , n = 6 a=5,n=6 a=5,n=6 5 φ ( 6 )   m o d   6 = 5 2   m o d   6 ≡ 1 5^{\varphi(6)}\ mod\ 6=5^2\ mod\ 6\equiv1 5φ(6) mod 6=52 mod 61

二、证明

模板

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值