欧拉函数&&欧拉定理

本文介绍了数论中欧拉函数的概念及其两种计算方法:一种是递推法,另一种是利用定理简化计算过程。递推法适用于直接计算特定数值的欧拉函数,而利用定理的方法则更适用于批量计算较小范围内的欧拉函数值。

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

在数论中,对正整数n,欧拉函数是小于或等于n的数中与n互质的数的数目。
n的欧拉函数值记为:  F(n)
那么,我们是怎样求欧拉函数的值呢?
方法是这样的:
其实求欧拉函数值还有一种方法:即利用递推法求欧拉函数值

 
算法原理:开始令i的欧拉函数值等于它本身,如果i为偶数,可以利用定理:
当n为奇数的时候  F[2*N]=F[N];

变为求奇数的。
若p是一个正整数满足,那么p是素数,在遍历过程中如果遇到欧拉函数值等于自身的情况,那么说明该数为素数。把这个数的欧拉函数值改变,同时也把能被该素因子整除的数改变。
#include <iostream>
#include <cstdio>
using namespace std;
int  phi(int n)//递推写法
{
    int rea=n,i;
    for(i=2;i*i<=n;i++){
        if(n%i==0){
           rea=rea-rea/i;
           while(n%i==0)
                n/=i;
        }
    }
    if(n>1)
        rea=rea-rea/n;
    return rea;
}
const int N = 100001;
int p[N];
void phi(int n)//利用定理写法p(2*n)=p(n)
{
    for(int i=1;i<N;i++) p[i]=i;
    for(int i=2;i<N;i+=2) p[i]>>=1;
    for(int i=3;i<N;i+=2){
        if(p[i]==i){
            for( int j=i;j<N;j+=i)
                p[j]=p[j]-p[j]/i;
        }
    }
}
int main()
{
    int n;
    while(cin>>n){
        cout<<phi(n)<<endl;
    }
    return 0;
}

最后,我们来介绍一下欧拉定理:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值