[数论]欧拉函数

欧拉函数φ(x)定义为小于x且与x互质的整数数量。对于素数,φ(p)=p-1;利用素数筛法,若i能被质数prime[j]整除,则φ(prime[j]*i)=φ(i)*prime[j];否则,φ(prime[j]*i)=φ(i)*(prime[j]-1)。了解更多详情可参考推荐的优快云博客链接。

什么是欧拉函数
欧拉函数是小于x的整数中与x互质的数的个数,一般用φ(x)表示。特殊的,φ(1)=1。

推荐的网站1:https://blog.youkuaiyun.com/zxwsbg/article/details/81488956
推荐的网站2:https://blog.youkuaiyun.com/liuzibujian/article/details/81086324

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
int prime[maxn],phi[maxn],cnt=0;
bool vis[maxn];
void init(){
	phi[1]=1;
	for(int i=2;i<maxn;i++){
		if(!vis[i]){
			prime[cnt++]=i;
			phi[i]=i-1;
		}
		for(int j=0;j<cnt&&i*prime[j]<maxn;j++){
			vis[i*prime[j]]=1;
			if(i%prime[j]==0){
				phi[i*prime[j]]=phi[i]*prime[j];
				break;
			}
			else phi[i*prime[j]]=phi[i]*(prime[j]-1);         
		}
	}
}
int main(){
	init();
	for(int i=1;i<=20;i++) cout<<i<<"的欧拉函数值:"<<phi[i]<<endl;
}

简单的来说(不考虑1的情况下):
任何素数的欧拉函数值=该素数的大小-1;
即Eular【prime[j]】=prime[j]-1;

然后我们利用素数筛法,通过素数来下文章。

如果一个数i 可以整除 另一个质数prime[j],那么phi[prime[j]*i]=phi[i]*prime[j];
例如 i=6,prime[j]=3,则phi[18]=phi[6]*3=6。

如果一个数i 不可以整除 另一个质数prime[j],那么phi[prime[j]*i]=phi[i]*phi[prime[j]]=phi[i] *(prime[j]-1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值