数论:欧拉函数

目录

1.数论函数

 2.欧拉函数


1.数论函数

                                           f(x)=x-1

x的取值范围:定义域

f(x)的取值范围:值域

数论函数一般来说定义域是正整数,除非特殊要求

函数有以下几种类型:

1.普通函数

2.完全积性函数

                                 对于任意两个正整数 n,m,满足

                                       f(mn)=f(m)f(n)

3.积性函数

                                  对于两个互质的正整数n,m,满足

                                        f(mn)=f(m)f(n)

4.常数函数

                                              1(n)=1

5.单位函数

如果表达式为真,则等于1,反之等于0

                                             \varepsilon (n)=[n=1]

单位函数也是一种完全积性函数

 

 2.欧拉函数

$\phi$(n):表示1到n中与n互质的个数

表示为

\sum_{i=1}^n[gcd(i,n)=1]

也可表示为:

$\phi$(n)=n(1-\frac{1}{p1})(1-\frac{1}{p2})(1-\frac{1}{p3})........(1-\frac{1}{pk})

容斥原理:(奇加偶减)

 

可表示为                                            A+B-A\cap B           

                   

可表示为:          A+B+C-A\cap B-A\cap C-B\cap C+A\cap B\cap C

证明:

1到n中p的倍数,有                 

                                                 p,2p,3p,....., \frac{n}{p}p

1到n中q的倍数,有

                                                q,2q,3q,....., \frac{n}{q}q

一共有:

                                                   \frac{n}{p}+\frac{n}{q}-\frac{n}{pq}

则1到n中剩余的数即为互质的数

                                                $\phi$(n)=n-( \frac{n}{p}+\frac{n}{q}-\frac{n}{pq})

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

          即     $\phi$(n)=n(1-\frac{1}{p1})(1-\frac{1}{p2})(1-\frac{1}{p3})........(1-\frac{1}{pk})

性质:

                      1. $\phi$(n)=n-1 (n为质数)

                      2.若  n=p^k ,$\phi$(n)=p{k}-p{k-1}(p为质数)

                      3.$\phi$(2n)=$\phi$(n)    (n为奇数)

                      4.    \sum$\phi$(d)=n ,(d|n)

                     5,  若p|n且p^2|n ,则

                           $\phi$(n)=$\phi$(\frac{n}{p})p

c++求欧拉函数:

void ola_prime(int n){
	 vis[1]=1;
	 for(int i=2;i<=n;i++){
	 	 if(!vis[i]){
	 	 	prime[++cnt]=i;
	 	 	f[i]=i-1;
		 }
		 for(int j=1;j<=cnt&&i*prime[j]<=n;j++){
		 	 vis[i*prime[j]]=1;
		 	 if(i%prime[j]==0){
		 	 	 f[i*prime[j]]=f[i]*prime[j];
		 	 	 break;
			 }
			 f[i*prime[j]]=f[i]*f[prime[j]];
		 }
	 }
}
        long long n;
    	cin>>n;
    	long long ans=n;
    	for(long long i=2;i<=sqrt(n);i++){
    		if(n%i==0){
    			ans=ans/i*(i-1);
    			while(n%i==0) n/=i;
			}
		}
		if(n>1) ans=ans/n*(n-1);
		cout<<ans<<"\n";

 

                       

  • 23
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值