当前位置: 首页 > ops >正文

欧拉定理:若 gcd(a,n)=1,则 a^φ(n)≡1(mod n)。

【欧拉定理简介】
欧拉定理:
若 gcd(a,n)=1,则 a^φ(n)≡1(mod n)
(1)例如,a=3,n=10,gcd(3,10)=1,φ(10)=4,则 a^φ(n)=3^4=81,81 mod 10=1,欧拉定理成立。
(2)当 n 是质数时,φ(n)=n-1,欧拉定理退化为费马小定理 a^(n-1)≡1(mod n),其中 a 和 n 的最大公约数 gcd(a,n)=1。 例如,a=2,n=5,gcd(2,5)=1,a^(n-1)=2^4=16,16 mod 5=1,费马小定理成立。
(3)注意:费马小定理是欧拉定理的特例,在模运算中应用广泛。

【算法代码】
该代码实现了四个核心功能:
(1)计算最大公约数 (gcd);
(2)通过质因数分解计算欧拉函数 φ(n);
(3)计算快速幂;
(3)验证欧拉定理 a^φ(n)≡1 mod n 的条件和结论。

#include <bits/stdc++.h>
using namespace std;int gcd(int a, int b) {if(b==0) return a;else return gcd(b,a%b);
}int oula_phi(int x) {int ans=x;for(int i=2; i*i<=x; i++) {if(x%i==0) {ans=ans/i*(i-1);while(x%i==0) x/=i;}}if(x>1) ans=ans/x*(x-1);return ans;
}int fastPow(int a,int b,int p) {int ans=1;while(b) {if(b & 1) ans=ans*a%p;a=a*a%p;b>>=1;}return ans%p;
}bool verify_euler_theorem(int a,int n) {if(gcd(a,n)!=1) return false;int phi=oula_phi(n);int ans=fastPow(a,phi,n);return ans==1;
}int main() {int a,n;cin>>a>>n; //gcd(a,n)=1if(verify_euler_theorem(a,n)) {cout<<"φ("<<n<<")="<<oula_phi(n)<<endl;cout<<a<<"^φ("<<n<<")≡1 mod "<<n<<" is true."<<endl;} else cout<<"Not meeting the conditions."<<endl;return 0;
}/*
in:
3 7out:
φ(7)=6
3^φ(7)≡1 mod 7 is true.
*/



 

http://www.xdnf.cn/news/9221.html

相关文章:

  • 2025 吉林CCPC
  • 【数据结构】 时间复杂度
  • 浙大版《Python 程序设计》题目集6-3,6-4,6-5,6-6列表或元组的数字元素求和及其变式(递归解法)
  • 前端生成UUID
  • 5.27 打卡
  • 哪些技术要素决定了多媒体数字沙盘的呈现效果与用户体验?
  • Cursor 与DeepSeek的完美契合
  • 树莓派超全系列教程文档--(49)远程访问树莓派
  • 5.27 day 30
  • SQL计算列
  • 数据要素配置如何驱动城市经济韧性的多元模式
  • 【leetcode】209. 长度最小的子数组
  • LeetCode 高频 SQL 50 题(基础版)之 【连接】部分 · 上
  • 车载网关策略 --- 车载网关通信故障处理机制深度解析
  • ElasticSearch整合SpringBoot
  • 《深入解析UART协议及其硬件实现》-- 第一篇:UART基础与协议层详解
  • 一张Billing项目的流程图
  • 16. Git从入门到实践
  • Java-Set集合遍历的全面指南
  • 贝壳后端golang面经
  • 【信号与系统】【转载记录】漫谈《信号与系统》
  • 体绘制学习
  • Android开机向导定制(2)开机向导配置
  • 【免费】【无需登录/关注】多点矩阵计算器,计算任何坐标系转换
  • 【无标题】C++单例模式详解
  • 二次封装 Vuex for Uniapp 微信小程序开发
  • linux如何查看网络设备类型
  • 学者观察 | Web3.0的技术革新与挑战——北京理工大学教授沈蒙
  • 机器学习中的关键术语及其含义
  • 打造自己的开源组件:如何将 Starter 发布到 Maven Central?