首页 > 其他分享 >欧拉函数(互质)

欧拉函数(互质)

时间:2022-10-24 18:58:30浏览次数:117  
标签:phi 函数 ai int 互质 欧拉

定义:

欧拉函数是指:一个数N,在1~N这个范围内,与N互质的数的“个数”记作 \(\phi\)(N)
互质是指gcd(i,N) = 1
因为一个数总能被分解为:N = P\(_{1}\)\(^{a1}\)*P\(_{2}\)\(^{a2}\)*P\(_{3}\)\(^{a3}\)*....*P\(_{k}\)\(^{ak}\)
且欧拉函数为一个积性函数:\(\phi\)(mn) = \(\phi\)(m) * \(\phi\)(n)

所以我们可以得到\(\phi\)(N) = \(\phi\)(P\(_{1}\)\(^{a1}\))*\(\phi\)(P\(_{2}\)\(^{a2}\))*\(\phi\)(P\(_{3}\)\(^{a3}\))*......*\(\phi\)(P\(_{k}\)\(^{ak}\))
对于其中的某一项\(\phi\)(P\(_{i}\)\(^{ai}\))分析:从1到P\(_{i}\)\(^{ai}\)共有P\(_{i}\)\(^{ai}\)个数,其中与P\(_{i}\)\(^{ai}\)不互质的有P\(_{i}\),2*P\(_{i}\),3*P\(_{i}\).....P\(_{i}\)\(^{ai-1}\)*P\(_{i}\)共有P\(_{i}\)\(^{ai-1}\)项,所以互质的就有P\(_{i}\)\(^{ai}\)-P\(_{i}\)\(^{ai-1}\)项,所以我们可以得到公式

\(\phi\)(N) = N * (1-\(\frac{1}{a1}\))*(1-\(\frac{1}{a2}\))*.....*(1-\(\frac{1}{ak}\))

代码实现:

  1. 朴素算法(公式法):
void solve() {
	int x;
	cin>>x;
	int res = x;
	for(int i = 2;i <= x/i;++i){
		if(x%i == 0){
			while(x%i == 0) x/= i;
			res = res/i*(i-1);
		}
	}
	if(x>1) res = res/x*(x-1);
	cout<<res<<endl;
}

2.线性筛法

以上解释引用自Sundae

int primes[N],cnt;//线性筛 
int phi[N];//欧拉函数 
bool st[N];
void get_eulers(int n){
	phi[1] = 1;
	for(int i = 2;i <= n;++i){
		if(!st[i]){
			primes[cnt++] = i;
			phi[i] = i-1;
		}
		for(int j = 0;primes[j]<=n/i;++j){
			st[primes[j]*i] = true;
			if(i%primes[j] == 0){
				phi[primes[j]*i] = primes[j]*phi[i];
				break;
			}
			phi[primes[j]*i] = phi[i]*(primes[j]-1);
		}
	}
}

标签:phi,函数,ai,int,互质,欧拉
From: https://www.cnblogs.com/empty-y/p/16821567.html

相关文章

  • BZOJ 4805(欧拉函数求和-杜教筛)
    Description给出一个数字N,求sigma(phi(i)),1<=i<=NInput正整数N。N<=2*10^9Output输出答案。SampleInput10SampleOutput32HINT杜教筛入门#include<bits/stdc++......
  • 函数003
    函数的嵌套调用和链式访问每一个函数的定义不能嵌套,但是可以嵌套调用链式访问:把一个函数的返回值作为另一个函数的参数printf打印在屏幕上的个数    函数的声......
  • 【Python基础学习】第十一节 内置函数详解
    Python基础学习之内置函数Python3.5版本中的68个内置函数,按顺序逐个进行了自认为详细的解析,现在是时候进行个总结了。为了方便记忆,将这些内置函数进行了如下分类:1.数学运......
  • 反序列化(钩子函数进行复杂数据验证)
    反序列化(钩子函数进行复杂数据验证)5.1验证单个字段序列化器:classStudent1Serializer1(serializers.Serializer):"""学生信息序列化器"""#1.转换的字......
  • 关于 Vue 中 h() 函数的一些东西
    最近在项目上需要一个信息弹窗,来显示信息。一开始只让它弹出了文字,而且只有一条信息。而给我的需求是多条文字和图片,而后我使用了elementui中的Notification通知组件来......
  • vue中的data为什么是函数
    1.vue中组件是用来复用的,为了防止data复用(同一个组件被复用多次会创建多个实例)。2.vue组件中的data数据都应该是相互隔离,互不影响的,组件每复用一次,data数据就应该被复制一......
  • 函数用法
    平方函数——pow平方根函数——sqrt查找字符出现的次数——count万用类型——auto实现数组翻转——reverse取最大/最小值——max/min平方函数——pow函数:pow(x,......
  • ES6生成器函数2
    //模拟获取用户数据订单数据和商品数据functiongetUsers(){setTimeout(()=>{letdata="用户数据";//......
  • 函数
    前言考虑这样的问题,你需要实现三个功能,而且每个功能需要使用多次,那么如果使用循环的话是不是不能很好的控制每个功能的次数,不使用循环的话又会使得代码很长。这时,就可以使......
  • create-function函数代码注入
    creat_function()代码注入creat_function函数根据传递的参数创建匿名函数,并为其返回唯一名称。语法:create_function(string$args,string$code)string$args声明的函......