java欧拉函数_欧拉函数(总结)

定义

欧拉函数ϕ(n)是不超过n且和n互质的正整数的个数。欧拉函数φ(n)的作用就是转化,从而简化运算(小性质:n的所有质因子之和=eular(n)*n/2);

下面直观地看看欧拉函数:

n

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

φ(n)

1

1

2

2

4

2

6

4

6

4

10

4

12

6

8

定理

定理1 算术函数f如果满足对于任意两个互质的正整数m和n,均有f(mn)=f(m)f(n),就称f为积性函数(或乘性函数)。如果对于任意两个正整数m和n,均有f(mn)=f(m)f(n),就称为完全积性函数。

定理2 若m、n互质,ϕ(mn)=ϕ(m)ϕ(n),所以欧拉函数是积性函数。因为mn互质,和m互质的数乘上和n互质的数就会和mn互质。

定理3

22cb0c9efc68ae150360b99acd261632.png

欧拉函数的两种求法#include

using namespace std;

int phi[100011];

int eular(int n){//求一个数的欧拉值

int res=n;

if(n==1)

return 1;

for(int i=2;i<=n;i++){

if(n%i==0){

res=res/i*(i-1);

while(n%i==0)

n/=i;

}

}

return n>1?res/n*(n-1):res;

}

void eularplus(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);

}

}

}

int main()

{

int n;

scanf("%d",&n);

printf("%d\n",eular(n));

eularplus(n);

for(int i=1;i<=n;i++)

printf("%d ",phi[i]);

printf("\n");

return 0;

}

// 15

// 8

// 1 1 2 2 4 2 6 4 6 4 10 4 12 6 8

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值