数论——欧拉函数

模板——欧拉函数

欧拉函数 H(x)表示小于n与n互质的数的个数。

H(x)=x(1-1/P1)(1-1/P2)…(1/Pn)

P1,P2…Pn为x的素数因子

先引入一个例题吧
计蒜客——蓝桥杯模拟——欧拉函数
在这里插入图片描述


这是一个填写代码的题:
#include <stdio.h>
int euler(int n) {
    int res = n;
    for (int i = 2; i <= n; i++) {
        if (n % i == 0) {
            res = res / i * (i-1);/*这一行是你需要填写的代码*/
            while (n % i == 0) {
                n /= i;
            }
        }
    }
    return res;
}
int main(void) {
    int n;
    scanf("%d", &n);
    printf("%d\n", euler(n));
    return 0;
}

不局限于这个题,可以看一下用sqrt函数的解法

缩小了一点范围而已。
sqrt函数(注意数据类型要用double 或者float哦):

#include<stdio.h>
#include<math.h>
int main()
{
    double n,m;
    n=16;
    m=sqrt(n);
    printf("%.lf",m);
    return 0;
}

代码:

#include <stdio.h>
#include <math.h>
int euler(int n) {
    int res = n;
    for (int i = 2; i <= sqrt(n); i++) {
        if (n % i == 0) {
            res = res / i * (i-1);
            while (n % i == 0) {
                n /= i;
            }
        }
    }
     if(n != 1) res=res-res/n;
    return res;
}
int main(void) {
    int n;
    scanf("%d", &n);
    printf("%d\n", euler(n));
    return 0;
}

然后我们抛开这个题看一下欧拉公式
引用一个大佬的博客
点击我!我是传送门
还有就是欧拉函数的一些性质。
大致就是这些:

  • H(1)=1,除了2以外,H(n)都是偶数
  • 小于n与n互质的所有数的和为 H(n)*n/2
  • p为素数,H(pk)=pk-p^(k-1).
  • H(p)=p-1。
  • 如果m和n互素,即GCD(m, n) = 1,那么H(m * n) = H(m) * H(n)
    ps:反正我也记不住。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值