欧拉phi函数—详解

定义

111~NNN中与NNN互质的数的个数叫欧拉函数,记为φ(N)\varphi(N)φ(N)
NNN分解质因数N=p1c1∗p1c1∗...∗pkckN=p_1^{c_1}*p_1^{c_1}*...*p_k^{c_k}N=p1c1p1c1...pkck
则有φ(N)=N∗(1−1p1)∗(1−1p2)∗...∗(1−1pk)\varphi(N)=N*(1-\frac{1}{p_1})*(1-\frac{1}{p_2})*...*(1-\frac{1}{p_k})φ(N)=N(1p11)(1p21)...(1pk1)
特别的φ(1)=1\varphi(1)=1φ(1)=1


证明

首先显然111~NNN中与NNN互质的数就是
1−N1-N1N中不与NNN含有相同质因子的数

那么先简单分析NNN只有两个质因子的情况
假设p,qp,qp,qNNN的质因子
那么111~NNN中p的倍数有Np\frac{N}{p}pN个,q的倍数有Nq\frac{N}{q}qN
我们自然要筛掉这些数N−Np−NqN-\frac{N}{p}-\frac{N}{q}NpNqN

但是注意到这里面p∗qp*qpq的倍数被减了两次
根据容斥原理,当然还要加回来
N−Np−Nq+NpqN-\frac{N}{p}-\frac{N}{q}+\frac{N}{pq}NpNqN+pqN

对这个式子稍作变换
N−Np−Nq+NpqN-\frac{N}{p}-\frac{N}{q}+\frac{N}{pq}NpNqN+pqN
           ⇓\ \ \ \ \ \ \ \ \ \ \ \Downarrow           
N∗(1−1p−1q+1pq)N*(1-\frac{1}{p}-\frac{1}{q}+\frac{1}{pq})N(1p1q1+pq1)
           ⇓\ \ \ \ \ \ \ \ \ \ \ \Downarrow           
N∗(1−1p)∗(1−1q)N*(1-\frac{1}{p})*(1-\frac{1}{q})N(1p1)(1q1)
只有两个质因数的情况证毕
到这里再用数学归纳法就可以拓展出上述得式子了


实现

根据上述函数定义式
可以得到一个在分解质因数时同时求解单个欧拉函数的方法
时间复杂度为O(N)O(\sqrt{N})O(N)

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

当然我们还可以有递推打表的计算
类似埃式筛法
每枚举到一个质数,就更新他的所有倍数的phi值
复杂度约为O(NlogN)O(NlogN)O(NlogN)

void euler(int n)
{
    for(int i=1;i<=n;++i) phi[i]=i;
    for(int i=2;i<=n;++i)
    {
        if(phi[i]==i)//发现一个质数
        for(int j=i;j<=n;j+=i)//处理("筛")他的倍数
        phi[j]=phi[j]/i*(i-1);
    }
}

既然有类似埃式筛的递推方法
那么自然也不会少了线性筛

利用线性筛递推求解phi需要用到欧拉函数的两个性质
1.若有p∣Np\mid NpN,且满足p2∣Np^2\mid Np2N,则φ(N)=φ(N/p)∗p\varphi(N)=\varphi(N/p)*pφ(N)=φ(N/p)p
2.若有p∣Np\mid NpN,且一定不满足p2∣Np^2\mid Np2N,则φ(N)=φ(N/p)∗(p−1)\varphi(N)=\varphi(N/p)*(p-1)φ(N)=φ(N/p)(p1)
这两条性质会在接下来给出证明

线性筛中每个合数n只会被他的最小质因子p筛一次
于是我们利用这点从φ(N/p)\varphi(N/p)φ(N/p)递推到φ(N)\varphi(N)φ(N)

复杂度为O(N)O(N)O(N)

void Phi(int n)
{
    phi[1]=1;
    for(int i=2;i<=n;++i)
    {
        if(!vis[i]) prim[++cnt]=i,phi[i]=i-1;
        for(int j=1;j<=cnt;++j)
        {
            if(i*prim[j]>n) break;
            vis[i*prim[j]]=1;
            if(i%prim[j]==0){ phi[i*prim[j]]=phi[i]*prim[j]; break;}
            else phi[i*prim[j]]=phi[i]*phi[prim[j]];
        }
    }
}

欧拉函数的性质

1.∀N>1\forall N>1N>1111~NNN中与NNN互质的数的和为N∗φ(N)/2N*\varphi(N)/2Nφ(N)/2

证明

若有x∈[1,N]x\in[1,N]x[1,N]gcd(N,x)=1(即N与x互质)gcd(N,x)=1(即N与x互质)gcd(N,x)=1Nx
根据更相减损术gcd(N,x)=gcd(N,N−x)gcd(N,x)=gcd(N,N-x)gcd(N,x)=gcd(N,Nx)

111~NNN中与NNN互质的数是成对出现的,对称轴就是N/2N/2N/2
也就是说111~NNN中与NNN互质的数的平均值N/2N/2N/2
而总和就是N∗φ(N)/2N*\varphi(N)/2Nφ(N)/2
证毕


2.(1)当a,ba,bab互质时,有φ(a∗b)=φ(a)∗φ(b)\varphi(a*b)=\varphi(a)*\varphi(b)φ(ab)=φ(a)φ(b)
(2)对NNN分解质因数N=p1c1∗p1c1∗...∗pkckN=p_1^{c_1}*p_1^{c_1}*...*p_k^{c_k}N=p1c1p1c1...pkck,则有φ(N)=∏i=1kφ(pici)\varphi(N)=\prod_{i=1}^k\varphi(p_i^{c_i})φ(N)=i=1kφ(pici)

证明

这里的两条性质其实是直接应用了积性函数的性质
什么是积性函数
如果当a,ba,bab互质时,有f(a∗b)=f(a)∗f(b)f(a*b)=f(a)*f(b)f(ab)=f(a)f(b),则f(x)为积性函数f(x)为积性函数f(x)
上述(1)是直接应用了定义
而(2)中将N分解质因数,显然分解的每一项都两两互质
根据积性函数定义也不难得出上述式子


3.(1)若有p∣Np\mid NpN,且满足p2∣Np^2\mid Np2N,则φ(N)=φ(N/p)∗p\varphi(N)=\varphi(N/p)*pφ(N)=φ(N/p)p
(2)若有p∣Np\mid NpN,且一定不满足p2∣Np^2\mid Np2N,则φ(N)=φ(N/p)∗(p−1)\varphi(N)=\varphi(N/p)*(p-1)φ(N)=φ(N/p)(p1)

证明

上述(1)中"若有p∣Np\mid NpN,且满足p2∣Np^2\mid Np2N"
说明N和N/p含有相同质因子
我们分析只含有两个质因子p和q的简单情况
φ(N)=N−Np−Nq+Npq\varphi(N)=N-\frac{N}{p}-\frac{N}{q}+\frac{N}{pq}φ(N)=NpNqN+pqN
φ(N/p)=Np−Np2−Npq+Np2q\varphi(N/p)=\frac{N}{p}-\frac{N}{p^2}-\frac{N}{pq}+\frac{N}{p^2q}φ(N/p)=pNp2NpqN+p2qN
二者相除商为p
用数学归纳法扩展出k个质因子的情况可以得到相同结果

上述(2)中 “若有p∣Np\mid NpN,且一定不满足p2∣Np^2\mid Np2N
说明NNNN/pN/pN/p一定互质
根据积性函数定义有φ(N)=φ(N/p)∗φ(p)\varphi(N)=\varphi(N/p)*\varphi(p)φ(N)=φ(N/p)φ(p)
因为p为素数,所以φ(p)=p−1\varphi(p)=p-1φ(p)=p1
φ(N)=φ(N/p)∗(p−1)\varphi(N)=\varphi(N/p)*(p-1)φ(N)=φ(N/p)(p1)
证毕


4.∑d∣nφ(d)=n\sum_{d|n}\varphi(d)=ndnφ(d)=n

证明

f(n)=∑d∣nφ(d)=nf(n)=\sum_{d|n}\varphi(d)=nf(n)=dnφ(d)=n
若有n,m互质,那么f(nm)=∑d∣nmφ(d)=∑d∣nφ(d)∗∑d∣mφ(d)f(nm)=\sum_{d|nm}\varphi(d)=\sum_{d|n}\varphi(d)*\sum_{d|m}\varphi(d)f(nm)=dnmφ(d)=dnφ(d)dmφ(d)
可得f(n)f(n)f(n)积性函数

对于n的某个质因子f(pk)=∑d∣pkφ(d)=φ(1)+φ(p)+φ(p2)+...+φ(pk)f(p^k)=\sum_{d|p^k}\varphi(d)=\varphi(1)+\varphi(p)+\varphi(p^2)+...+\varphi(p^k)f(pk)=dpkφ(d)=φ(1)+φ(p)+φ(p2)+...+φ(pk)
由上述3.(1)知该式为一个等比数列+1公比为p
更具等比数列求和公式得f(pk)=pkf(p^k)=p^kf(pk)=pk

所以f(n)=∏i=1kf(pk)=∏i=1kpk=nf(n)=\prod_{i=1}^{k}f(p^k)=\prod_{i=1}^kp^k=nf(n)=i=1kf(pk)=i=1kpk=n
证毕


欧拉定理

定理:若正整数a,na,na,n互质,则有aφ(n)≡1(mod  n)a^{\varphi(n)}\equiv 1(\mod n)aφ(n)1(modn)

推论:若正整数a,na,na,n互质,则对于任意正整数b,有ab≡abmod  φ(n)(mod  n)a^b\equiv a^{b\mod \varphi(n)}(\mod n)ababmodφ(n)(modn)

扩展欧拉定理:
a,n∈Za,n\in Za,nZ,则aba^bab {ab,b<φ(n)abmod  φ(n)+φ(n),b>=φ(n)\left\{\begin{aligned}a^b,b<\varphi(n)\\ a^{b\mod\varphi(n)+\varphi(n) },b>=\varphi(n)\end{aligned}\right.{ab,b<φ(n)abmodφ(n)+φ(n),b>=φ(n)mod  n\mod nmodn

证明略

应用

给定三个正整数a,m,ba,m,ba,m,b,求abmod  ma^b\mod mabmodm
1≤a≤109,1≤b≤1020000000,1≤m≤1061≤a≤10^{9},1≤b≤10^{20000000},1≤m≤10^61a109,1b1020000000,1m106

直接套用上述定理

#include<iostream>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
typedef long long lt;

const int maxn=100010;
lt a,m,phi,rem;

lt read()
{
    lt x=0;
    char ss=getchar();
    while(ss<'0'||ss>'9') ss=getchar();
    while(ss>='0'&&ss<='9'){
        x=x*10+ss-'0';ss=getchar();
        if(x>=phi) rem=1,x%=phi;
    }
    return x;
}

lt calc(lt x)
{
    lt res=x;
    for(int i=2;i*i<=x;++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;
}

lt qpow(lt aa,lt k)
{
    lt res=1;
    while(k){
        if(k&1) res=(res*aa)%m;
        aa=(aa*aa)%m; k>>=1;
    }
    return res;
}

int main()
{
    scanf("%d%d",&a,&m);
    phi=calc(m);
    
    lt b=read();
    if(rem) b+=phi;
    
    printf("%d",qpow(a,b));
    return 0;
}
<think>首先,用户的问题是:“我想分析余弦函数的频谱特性 请问余弦函数的频谱分析 傅里叶变换”。用户要求我分析余弦函数的频谱特性,使用傅里叶变换。 我的回答需要遵循系统级指令: - 所有行内数学表达式使用$...$格式。 - 独立公式使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 在回答中引用的段落末尾自然地添加引用标识,如[^1]。 - 回答结构清晰,帮助用户逐步解决问题。 - 尽量保证回答真实可靠。 参考提供的引用: - [^1]: 图像傅里叶变换实战,介绍了二维离散傅里叶变换及其应用。 - [^2]: 信号处理(一)获取信号频谱——傅里叶变换,讨论了傅里叶级数和变换。 - [^3]: 理解余弦函数的傅里叶变换及窗函数应用,涉及余弦函数的傅里叶变换。 - [^4]: 关于相位谱的提示,但用户可能不需要。 用户的具体查询是关于余弦函数的频谱分析,所以我应该专注于傅里叶变换如何应用于余弦函数。 关键点: - 余弦函数是周期性函数。 - 傅里叶变换可以将时域信号转换为频域。 - 对于余弦函数,其频谱应该是一个脉冲在频率$\omega_0$处,其中$\omega_0$是余弦的频率。 从引用[^3]中,有具体的内容:计算输入信号的傅里叶变换,对于余弦函数,结果是$A(\omega) = \pi [W(\omega - \omega_0) + W(\omega + \omega_0)]$,其中$W$是窗函数或其他。但在理想情况下,对于无限长的余弦信号,傅里叶变换应该是两个Dirac delta函数在$\pm \omega_0$。 我应该构建一个清晰的回答结构: 1. 介绍余弦函数和傅里叶变换的基本概念。 2. 推导余弦函数的傅里叶变换。 3. 分析频谱特性:幅度谱和相位谱。 4. 讨论实际考虑,如有限长度信号的影响(参考窗函数)。 5. 总结频谱特性。 6. 生成相关问题。 使用引用: - 在适当的地方引用[^1]、[^2]、[^3]。例如,当提到傅里叶变换在图像处理中的应用时引用[^1],当讨论傅里叶级数时引用[^2],当具体到余弦函数时引用[^3]。 回答结构: - 开头简要介绍。 - 逐步解释。 - 使用数学公式。 - 结束时生成相关问题。 数学推导: - 余弦函数:$x(t) = \cos(\omega_0 t)$ - 傅里叶变换:$X(\omega) = \int_{-\infty}^{\infty} x(t) e^{-j\omega t} dt$ - 对于$\cos(\omega_0 t)$,结果是$\pi [\delta(\omega - \omega_0) + \delta(\omega + \omega_0)]$,因为$\cos(\theta) = \frac{e^{j\theta} + e^{-j\theta}}{2}$ 在频域,幅度是脉冲,相位是零或常数。 对于有限长度信号,频谱会扩散,如引用[^3]提到的卷积。 生成相关问题: - 基于主题,如应用、优化、其他函数等。 最终回答用中文。</think>### 余弦函数的频谱分析:傅里叶变换详解 余弦函数是信号处理中的基本周期信号,其频谱特性分析是理解频域表示的关键。傅里叶变换(Fourier Transform)能将时域信号转换为频域,揭示频率成分的幅度和相位信息。下面我将逐步分析余弦函数$y(t) = \cos(\omega_0 t)$的频谱特性,其中$\omega_0$是角频率(单位:rad/s),$f_0 = \omega_0 / (2\pi)$是频率(单位:Hz)。分析基于理想无限长信号,并讨论实际有限长信号的影响。 #### 1. **余弦函数的傅里叶变换推导** 余弦函数可表示为欧拉公式形式: $$\cos(\omega_0 t) = \frac{e^{j\omega_0 t} + e^{-j\omega_0 t}}{2}$$ 傅里叶变换定义为: $$X(\omega) = \int_{-\infty}^{\infty} x(t) e^{-j\omega t} dt$$ 代入余弦函数: $$ X(\omega) = \int_{-\infty}^{\infty} \cos(\omega_0 t) e^{-j\omega t} dt = \int_{-\infty}^{\infty} \frac{e^{j\omega_0 t} + e^{-j\omega_0 t}}{2} e^{-j\omega t} dt $$ 拆分为两项: $$ X(\omega) = \frac{1}{2} \int_{-\infty}^{\infty} e^{j(\omega_0 - \omega)t} dt + \frac{1}{2} \int_{-\infty}^{\infty} e^{-j(\omega_0 + \omega)t} dt $$ 积分$\int_{-\infty}^{\infty} e^{j\alpha t} dt$对应Dirac delta函数$\delta(\alpha)$,因此: $$ X(\omega) = \pi \left[ \delta(\omega - \omega_0) + \delta(\omega + \omega_0) \right] $$ 这表示频谱在$\omega = \omega_0$和$\omega = -\omega_0$处有两个脉冲[^3]。实际应用中,频谱图通常只显示正频率($\omega > 0$),因为负频率是数学对称。 #### 2. **频谱特性分析** - **幅度谱**:幅度谱$|X(\omega)|$表示各频率分量的强度。从上述结果,幅度谱为: $$ |X(\omega)| = \pi \delta(\omega - \omega_0) \quad \text{(正频率)} $$ 这表明余弦函数只在$\omega_0$处有非零幅度,幅度值为$\pi$(单位取决于归一化)。在频谱图中,这是一个峰值在$f_0$处的脉冲[^2]。 - **相位谱**:相位谱$\phi(\omega)$表示各频率分量的相位偏移。对于纯余弦函数,相位谱为0(或常数),因为信号是偶函数且无初始相位偏移。即: $$ \phi(\omega) = 0 \quad \text{当} \quad \omega = \omega_0 $$ 相位谱在频谱分析中常被忽略,但它在信号重建时至关重要[^4]。 - **实际信号的影响**:理想无限长信号的频谱是理想脉冲,但实际信号有限长(如截断为$[-T/2, T/2]$)。这会导致频谱泄漏(spectral leakage),即脉冲扩散为sinc函数形状。引用[^3]中提到的窗函数(如矩形窗)应用: $$ A(\omega) = X(\omega) * W(\omega) = \pi \left[ W(\omega - \omega_0) + W(\omega + \omega_0) \right] $$ 其中$W(\omega)$是窗函数的频谱(例如矩形窗的$W(\omega) = T \cdot \text{sinc}(\omega T/2)$)。这会使主瓣变宽,旁瓣引入噪声[^3]。 #### 3. **频谱分析示例** 假设余弦函数$y(t) = \cos(2\pi \cdot 100 t)$($f_0 = 100$ Hz): - **理想频谱**:在$f = 100$ Hz处有单一峰值,幅度$\pi$。 - **有限长信号(如$T=0.1$ s)**:频谱扩散,主瓣宽度约$1/T = 10$ Hz,旁瓣衰减缓慢(见下图示意)。 ![示意图:理想频谱(脉冲) vs. 实际频谱(sinc形状)](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI0MDAiIGhlaWdodD0iMjAwIj48cmVjdCB3aWR0aD0iNDAwIiBoZWlnaHQ9IjIwMCIgZmlsbD0iI2ZmZiIvPjx0ZXh0IHg9IjUwIiB5PSI1MCIgZm9udC1mYW1pbHk9IkFyaWFsIiBmb250LXNpemU9IjE0Ij5JbGx1c3RyYXRpb246IElkZWFsIHNwZWN0cnVtIChzcGlrZSBhdCAxMDAgSHopIHZzLiBhcHBsaWVkIHdpbmRvdyAoc2luYyBmdW5jdGlvbikuPC90ZXh0Pjwvc3ZnPg==) 实际应用中,使用汉宁窗等可减少旁瓣[^1]。 #### 4. **应用与总结** 余弦函数的频谱分析在通信、音频处理和图像处理中广泛应用: - **通信系统**:调制信号(如AM广播)的载波频率分析[^2]。 - **图像处理**:二维余弦函数用于JPEG压缩中的DCT变换(离散余弦变换),是傅里叶变换的变体[^1]。 - **故障诊断**:机械振动信号中周期性成分的检测。 总结:余弦函数的频谱是离散的脉冲,表征其单一频率特性。但实际中需考虑信号长度和窗函数影响,以避免频谱泄漏[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值