欧拉函数编程

本文介绍了欧拉函数的概念,重点阐述了如何通过C++编程找到小于给定数n的所有质因数,以计算欧拉函数值。代码中涉及循环、质数判断和除法操作以确保正确性。

欧拉函数\phi (n)定义为小于n的所有与n互素的数的个数。

公式是\phi (n)=n*\prod_{1}^{s}(1-\frac{1}{x{i}})

其中xi为n的质因数,即xi既是质数也是n的因数,s指n的所有质因数的个数

或者写成这样n=p^{n}*q^{m}...(p,q等都是质因数,n,m是指数)

\phi (n)=n(1-\frac{1}{p})*(1-\frac{1}{q})...

所以欧拉函数只和质因数有关

相关公式推导查看离散数学课本

现在要编写程序,关键就是求出质因数

怎么找到它呢,可以从2开始循环,如果n%i==0,那i肯定是最小的那个质因数,但是之后的i就不一定了,所以要对n做处理

#include<iostream>
using namespace std;

int main( )
{
    int n;
    cin>>n;
    int ans=n;
    for(int i=2;i*i<=n;i++){
        if(n%i==0){//i此时是一个质因数
            ans=ans/i*(i-1);
            while(n%i==0) n/=i;//更新n
        }
    }
    if(n>1) ans=ans/n*(n-1);//最后一个质因子
    cout<<ans;
    return 0;
}

i一定是质因数吗?一定,如果i不是质数,那i的某个因数之前肯定已经循环到了,所以满足n%i==0的i肯定是质数

为什么有个while循环?就是这一步骤才能确保i是质因数,这个while循环相当与除了q^{m},这样之后不会被q的倍数影响到了;

循环过后如果n大于1,那么就是剩下最后一个质因子了,因为循环的条件是i*i<=n,再最后处理一下,而且如果是经过循环剩下的最后一个质因子,它的幂肯定是1了,所以直接处理。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值