热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

数论逆元求解(扩展欧几里得算法+费马小定理)

看数论看得头皮发麻,o(╥﹏╥)o,总算理解了一些东西。(推荐一个dalao博客,个人感觉他的博客易懂点,可能是那些颜文字的作用(逃))在看逆元之前我们先来看个同余方程的定理吧同余定理:

看数论看得头皮发麻,o(╥﹏╥)o,总算理解了一些东西。(推荐一个dalao博客,个人感觉他的博客易懂点,可能是那些颜文字的作用(逃...))

在看逆元之前我们先来看个同余方程的定理吧

 

同余定理:a和b取余p得到相同的余数,a≡b(mod p)  等价于 a-b)/p得到一个整数。(其实个人感觉写成 a mod p)≡b mod p 更好理解

 

 

逆元(数论倒数):对于正整数a和p,如果有ax≡1(mod p),那么把这个同余方程中x的最小正整数解称为a mod p的逆元。

为什么叫数论倒数呢,因为没有mod操作,那么x就相当于a的倒数,有mod操作时效果上和倒数一样。

同时我们把a的逆元写做:inv(a)

 

求解逆元:

1.费马小定理:a^(p-1) ≡1 (mod p)

两边同时除以a,a^(p-2) ≡inv(a)(mod p)。即inv(a)≡a^(p-2)(mod p)

 1 typedef long long LL;
2 LL fast_mod(LL x,LL n,LL mod){
3 LL ans=1;
4 while(n>0){
5 if(n&1) ans=(ans*x)%mod;
6 x=(x*x)%mod;
7 n>>=1;
8 }
9 return ans;
10 }
11 LL Fermat(LL a,LL b){
12 return fast_mod(a,p-2,p);
13 }

2.扩展欧几里得:a*x + b*y = 1

解x就是a关于b的逆元,解y就是b关于a的逆元

a*x % b + b*y % b = 1 % b

a*x % b = 1 % b

a*x = 1 (mod b)

 1 typedef long long LL;
2 LL e_gcd(LL a,LL b,LL &x,LL &y){
3 LL d=a;
4 if(b!=0){
5 d=e_gcd(b,a%b,y,x);
6 y-=(a/b)*x;
7 }
8 else{x=1;y=0;}
9 return d;
10 }
11
12 LL inv(LL t,LL p){
13 LL x,y;
14 if(e_gcd(t,p,x,y)==1) return (x%p+p)%p;
15 else return -1;
16 }

 


推荐阅读
  • 本文详细探讨了Java中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 非公版RTX 3080显卡的革新与亮点
    本文深入探讨了图形显卡的进化历程,重点介绍了非公版RTX 3080显卡的技术特点和创新设计。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 三星W799在2011年的表现堪称经典,以其独特的双屏设计和强大的功能引领了双模手机的潮流。本文详细介绍其配置、功能及锁屏设置。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文将详细介绍如何使用剪映应用中的镜像功能,帮助用户轻松实现视频的镜像效果。通过简单的步骤,您可以快速掌握这一实用技巧。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 解决PHP与MySQL连接时出现500错误的方法
    本文详细探讨了当使用PHP连接MySQL数据库时遇到500内部服务器错误的多种解决方案,提供了详尽的操作步骤和专业建议。无论是初学者还是有经验的开发者,都能从中受益。 ... [详细]
  • Java内存管理与优化:自动与手动释放策略
    本文深入探讨了Java中的内存管理机制,包括自动垃圾回收和手动释放内存的方法。通过理解这些机制,开发者可以更好地优化程序性能并避免内存泄漏。 ... [详细]
author-avatar
m13380107
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有