今天分享关于欧拉函数的相关知识,通过欧拉函数可以解决求解单点的数值质数个数,以及运用欧拉定理可以将大数求幂的值给变小,这部分内容相信对大家能有所帮助。
1.欧拉函数的相关定义
2.欧拉单点函数的求法
3.欧拉定理
接下来将通过几道例题帮助大家更好地理解:
题目描述
定义F(n)=∏1ni。给定n,m,求nFm 对 109+7 取模后的值。
1≤n≤109,1≤m≤106
输入描述
输入共一行,包含两个整数 n,m。
输出描述
输出共一行,表示答案。
输入案例:
2 3
输出案例:
64
代码部分:
#include <iostream>
using namespace std;
using ll=long long;
const ll q=1e9+7;
ll qmi(ll a,ll n)
{ll ans=1;
while(n)
{
if(n&1)ans=ans*a%q;
a=a*a%q;n>>=1;
}return ans;}
int main()
{ll n,m;cin>>n>>m;
ll c=1e9+7;ll phi=c;
for(int i=2;i<=c/i;i++)
{
if(c%i)continue;
phi=phi/i*(i-1);
while(c%i==0)c/=i;
}
if(c>1)phi=phi/c*(c-1);
ll b=1;
for(int i=1;i<=m;i++)b=b*i%phi;
cout<<qmi(n,b);
return 0;
}
这是关于欧拉函数应用的模版问题,希望大家可以通过这道题好好理解这个部分。
两个整数(或正整数)的最大公约数(GCD)为 1时,称这两个数互质。
问题描述
小蓝是一名喜欢动手创造的学生,这天他利用废旧物品改造了一台电池储蓄盒。该储蓄盒可以将自身储存的电量输送给其他电器。每次输送完电量后,储蓄盒里的电量就会减少。电池储蓄盒的电量上限为正整数 nn ,当储蓄盒的电量值为 n 时,它只能输送给那些电量值比 n 小且与 n 无共享因子(除了 1)的电器。
小蓝好奇当这个电池储蓄盒的电量为 n 时,它可以输送几次电量给其他电器。
输入格式
输入仅一行,包含一个正整数 n(n≤109)。
输出格式
输出电池储蓄盒的电量为 n 时,它能输送给其他电器电量的次数。
输入案例:
7
输出案例:
6
代码部分:
#include <iostream>
using namespace std;
using ll=long long;
int main()
{
ll n;
cin>>n;
ll phi=n;
for(ll i=2;i*i<=n;i++){
if(n%i)continue;
phi=phi/i*(i-1);
while(n%i==0)n/=i;
}
if(n>1)phi=phi/n*(n-1);
cout<<phi;
return 0;
}
注意理解互质的概念
3.
问题描述
求 2(3(4(...2023)) 的值对 2023 取模的结果。
注: 上式都是指数,可写为 2∗∗(3∗∗(4∗∗(...2023...)) 其中 ∗∗∗∗ 表示指数。
代码部分:
#include<bits/stdc++.h>
using namespace std;
#define int long long
//欧拉函数
int get_eular(int n){
int phi=n;
for(int i=2;i<=n/i;i++){
if(n%i) continue;
while(n%i==0) n/=i;
phi=phi/i*(i-1);
}
if(n>1)phi=phi/n*(n-1);
return phi;
}
//快速幂
int quick(int base, int x, int mod){
int res=1;
while(x){
if(x&1) res=res*base%mod;
base=base*base%mod;
x>>=1;
}
return res;
}
signed main(){
int a=get_eular(2023);
int t=2023;
for(int i=2022;i>=3;i--){
t=quick(i,t,a);};
t=quick(2,t,2023);
cout<<t<<endl;
return 0;
}
注意这道题连乘连求幂的区别
好了,今天的分享就到这里,希望大家能够好好理解这个部分。
希望大家能够多多关注博主,后续也将继续分享相关内容。