欧拉函数和欧拉定理

欧拉函数和欧拉定理:

欧拉函数:定义 φ(n) 表示不超过 n 的与 n 互质的正整数个数。
φ(1)=1 φ(2)=1 φ(3)=2

欧拉函数的常用性质:

  1. p 是质数,则 φ(pn)=pn1(p1)
  2. a|x,则 phi[ax]=a×phi[x]
  3. a,b 互质,则 φ(a)×φ(b)=φ(ab)

欧拉函数的求法:

  1. 方法一,用定义法求单个 x 的欧拉函数 φ(x)。其中 φ(x)=x×p11p1×p21p2...pk1pk

  2. 方法二,用线性筛求 1n 以内所有

求单个板子:

int get_phi(int n)
{
int add=n;
for(int i=2;i*i<=n;i++)
{
if(n%i==0) add=add/i*(i-1);
while(n%i==0) n/=i;
}
if(n!=1) add=add/n*(n-1);
return add;
}

线性筛板子:

#include<bits/stdc++.h>
#define mm 100
using namespace std;
bool vis[mm];
vector<int> prime;
int n;
int phi[mm];
void work()
{
phi[1]=1;
for(int i=2;i<=n;i++)
{
if(!vis[i]) prime.push_back(i),phi[i]=i-1;
for(auto x:prime)
{
if(x*i>n) break;
vis[x*i]=true;
if(i%x==0)
{
phi[x*i]=phi[i]*x;
break;
}
else phi[x*i]=phi[i]*phi[x];
}
}
}
int main()
{
cin>>n;
work();
for(int i=1;i<=n;i++) cout<<phi[i]<<'\n';
}
posted @   noipwen  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示