大佬的数论合集

目录

    • 强烈推荐:大佬的博客:数论算法详解,超详细
  • 一.欧几里得算法
  • 二.扩展欧几里得算法
    • 1.扩展欧几里得
    • 扩展欧几里得原理
    • 定理
    • (1).扩展欧几里得算法应用
    • (2)例题1.求整数xxx和yyy使得ax+by=1ax+by=1ax+by=1
    • (3)例题2.扩展欧几里得模板
  • 二.费马小定理

强烈推荐:大佬的博客:数论算法详解,超详细

链接:
https://www.zhihu.com/question/379824357/answer/1088257294

一.欧几里得算法

辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法。

int gcd(int a, int b)
{if(b == 0) return a;return gcd(b, a%b);
}

有不懂的或者想了解更多的可以点击下方链接
详解及其拓展应用链接

二.扩展欧几里得算法

1.扩展欧几里得

扩展欧几里得算法:对于整数aaa,bbb,必定存在整数对xxx,yyy满足
ax+by=gcd(a,b)ax+by=gcd(a, b)ax+by=gcd(a,b)

扩展欧几里得原理

要求ax+by=gcdax+by=gcdax+by=gcd的整数解x,y,x,y,x,y,假设已经求得了bx′+(abx'+(a%b)y'=gcdbx′+(a的整数解 x′x'x′和y′y'y′,再将aa%b=a-(a/b)*ba带入,有ay′+b(x′−(a/b)∗y′)=gcd,ay'+b(x'-(a/b)*y')=gcd,ay′+b(x′−(a/b)∗y′)=gcd,于是我们就得到了(x,y)(x,y)(x,y)和(x′,y′)(x',y')(x′,y′)之间的关系:x=y′,y=x′−(a/b)∗y′x=y',y=x'-(a/b)*y'x=y′,y=x′−(a/b)∗y′。而当b=0b=0b=0时,gcd=a,gcd=a,gcd=a,此时有x=1,y=0.x=1,y=0.x=1,y=0.通过类似于辗转相除法的递归过程,不断地迭代,可得到ax+by=gcdax+by=gcdax+by=gcd的一个正整数解,我们可将它称为特解,同时得到gcdgcdgcd的值。

定理

定理1:gcd(a,b)==gcd(b,a%b)gcd(a,b)==gcd(b,a\%b)gcd(a,b)==gcd(b,a%b)这个是欧几里得提出并证明的。 (%\%%是取余的意思,在数学中可用modmodmod表示);

定理2:a∗x+b∗y==gcd(a,b)a*x + b*y ==gcd(a,b)a∗x+b∗y==gcd(a,b)一定存在解。这个定理又叫裴蜀定理,或贝祖定理。

(1).扩展欧几里得算法应用

  • 1.不定方程ax+by=cax+by=cax+by=c无解判定:如果cd==0cd== 0cd==0有解,否则无解
  • 2.求解不定方程ax+by=c:ax+by=c:ax+by=c:先用扩欧求出ax’+by’=d=gcd(a,b)ax’+by’= d =gcd(a,b)ax’+by’=d=gcd(a,b)的一组解x′x'x′和y′,y',y′,则方程原来的一组解为 x=x′c/d,y=y′c/dx=x'c/d,y=y'c/dx=x′c/d,y=y′c/d,通解为x=x′c/d+kb/dx=x'c/d+kb/dx=x′c/d+kb/d,y=y′c/d−ka/dy=y'c/d-ka/dy=y′c/d−ka/d(kkk为任意整数)
  • 3.解模线性方程:a≡b(modn)a ≡ b (mod n)a≡b(modn)的含义是a和b关于模n同余,即amodn==bmodna mod n == b mod namodn==bmodn,则ax−b=ny,ax-b=ny,ax−b=ny,移项得ax−ny=b,ax-ny=b,ax−ny=b,这恰好是一个二元一次不定方程,用2解决。
  • 4.乘法逆元:ax≡1(modn)ax ≡ 1 (mod n)ax≡1(modn)的解x称为aaa关于模n的乘法逆元。若gcd(a,n)=1gcd(a,n)=1gcd(a,n)=1有唯一解,反之无解。注意:通过扩欧算出的不定方程有很多解,最终的逆元应该是(x%n+n)%n,(x\%n+n)\%n,(x%n+n)%n,也就是逆元的范围是[0,n−1][0,n-1][0,n−1]
  • 5.改写算式:(a/b)modp==(a(b的逆元))(a/b) mod p == (a(b的逆元))(a/b)modp==(a(b的逆元))

详解+代码

(2)例题1.求整数xxx和yyy使得ax+by=1ax+by=1ax+by=1

问题描述:求整数x和y使得ax+by=1ax+by=1ax+by=1
限制条件:1≤a,b≤1091≤a,b≤10^91≤a,b≤109
分析:如果gcd(a,b)≠1gcd(a,b)≠1gcd(a,b)​=1,显然无解(有公约数一除就不是整数了),反之,如果gcd(a,b)=1,gcd(a,b)=1,gcd(a,b)=1,就可以通过扩展辗转相除法来求解。事实上一定存在整数对(x,y)(x,y)(x,y)使得ax+by=gcd(a,b),ax+by=gcd(a,b),ax+by=gcd(a,b),并可以用同样的算法求得。

int exgcd(int a, int b, int &x, int &y)
{int d=a;if (b != 0){d=exgcd(b, a%b, y, x);y-=(a/b)*x;}else{x=1; y=0;}return d;
}

详细代码见下文

(3)例题2.扩展欧几里得模板

题意翻译
一条直线:Ax+By+C=0(AB不同时为0),找到任意一个点(在-5e18~5e18之间)让它的横纵坐标均为整数,或者确定没有这样的点。
输入:A,B,C
输出:该点坐标,没有就输出-1
输入输出样例
输入 #1

2 5 3

输出 #1

6 -3
#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
#include<cstdio>
using namespace std;
typedef long long ll;
const ll maxn=1e5;
ll ex_gcb(ll a,ll b,ll &x1,ll &y1)
{ll x2,y2;if(!b){x1=1;y1=0;return a;}ll d=ex_gcb(b,a%b,x2,y2);x1=y2;y1=x2-a/b*y2;return d;
}
int main()
{ll a,b,c,x,y;scanf("%lld%lld%lld",&a,&b,&c);c=-c;ll d=ex_gcb(a,b,x,y);if(c%d){puts("-1");exit(0);}x=x*c/d;y=y*c/d;printf("%lld %lld\n",x,y);return 0;
}

二.费马小定理

定义:费马小定理(Fermat Theory)是数论中的一个重要定理,其内容为: 假如p是质数,且Gcd(a,p)=1,那么 a(p-1) ≡1(mod p)。即:假如a是整数,p是质数,且a,p互质(即两者只有一个公约数1),那么a的(p-1)次方除以p的余数恒等于1。
题目:给定一个方程式f(x)=5x13+13x5+kax,给定一个非负整数k,求能不能找到一个尽量小的非负整数a,使得上述方程式中的x任意取值,结果都能被65整除,如果有,输出a的值,否则输出no。
理解:65=13×5。要使f(x)是65的倍数,只需要f(x)是5和13的倍数即可。
1.若f(x)是13的倍数,则(5x13+13x5+kax )% 13 == 0,其中13x5显然是13的倍数,所以只需(5x13+kax )是13的倍数,即(5x12+ka )x是13的倍数。
如果x是13的倍数,则不用考虑。
如果x不是13的倍数,则x一定与13互素,由费马小定理得,x12%13= =1,则5x12%13= =5。因为要让任意x满足条件,则括号内必为13的倍数,有(ka+5)%13= =0,则ka%13= =8。
2.同理可得ka%5= =2。
据此,若k为5或13的倍数,a一定无解,否则,一定有解。

#include<stdio.h>
int main()
{int k;while(scanf("%d",&k)!=EOF){int i=1;if(k%5==0||k%13==0)printf("no\n");elsewhile(i){if(k*i%5==2&&k*i%13==8){printf("%d\n",i);break;}i++;}}return 0;
}

注:如果您通过本文,有(qi)用(guai)的知识增加了,请您点个赞再离开,如果不嫌弃的话,点个关注再走吧,日更博主每天在线答疑 ! 当然,也非常欢迎您能在讨论区指出此文的不足处,作者会及时对文章加以修正 !如果有任何问题,欢迎评论,非常乐意为您解答!( •̀ ω •́ )✧

【数论】数论基础合集相关推荐

  1. 狂神说Java--Java学习笔记(基础合集)

    笔记参考来源狂神说Java视频https://www.bilibili.com/video/BV12J41137hu 本篇笔记有点长,可以根据目录定位,建议配合视频学习. 预科 什么是计算机 名称:C ...

  2. Python 基础合集11:文件读写

    一.前言 本小节梳理了读写文件的基本用法,介绍了路径的写法.open()函数的用法和with关键字,并准备了图片.音频.视频进行演习操作. 环境说明:Python 3.6.windows11 64位 ...

  3. Python基础合集 练习19(类与对象3(多态))

    多态 class Horse: def init(self, name) -> None: self.name = name def fature(self):return '父亲-----马的 ...

  4. 前端面试基础合集——JQ

    1.html5新特性和css3的新特性有哪些? html5新特性: 用于绘画的 canvas 元素 用于媒介回放的 video 和 audio 元素 对本地离线存储的更好的支持 localStorag ...

  5. CTF 六大方向基础工具合集

    本文中提到的所有工具在ctf部落中均有,加入方式见文末. CTF 六大方向基础工具合集 今天来为大家分享CTF 六大方向基础工具简介集合. 一.MISC方向 杂项往往是不能被归到其他类别里的题目,所以 ...

  6. AcWing-C/C++语法基础【合集1】

    文章目录 重点练习题目链接fast-challenge 1.变量.输入输出.表达式与顺序语句 604. 圆的面积 605. 简单乘积 606. 平均数1 607. 平均数2 608. 差 609. 工 ...

  7. 二维几何基础大合集!《计算几何全家桶(一)》(基础运算、点、线、多边形、圆、网格)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的模板整合计划 目录 1.基本运算 1.1 判断正负函数(sgn) 1.2 点积(数量积.内积)(Dot) 1.3 向量积 ...

  8. python基础教程教材-Python3零基础教材电子书合集

    Python3零基础教材电子书合集,传送门:https://www.52pojie.cn/thread-676318-1-1.html 一.<Python编程从入门到实践> 链接:http ...

  9. python基础语法合集-Python基础语法合集.zip

    [实例简介]精心整理的Python基础语法合集,变量,循环,输入输出等等都有,主要是知道概念和怎么用的 如果打开文件后有文字变成符号的,先把字体改为宋体就正常了 [实例截图] [核心代码] 目录 了解 ...

最新文章

  1. 链表问题10——两个单链表生成相加链表(方法二)
  2. 文件包含漏洞检测工具fimap
  3. C++ Primer 5th笔记(3)字符串、向量和数组:字符串
  4. 《解释的工具:生活中的经济学原理 读书笔记6》
  5. java怎么读取文件夹下的_java怎么读取读取文件夹下的所有文件夹和文件?
  6. cgi+bin+php,crontab+php-cgi/php 定时执行PHP脚本
  7. VHDL实现简易停车场系统设计
  8. P5007-DDOSvoid的疑惑【树形dp】
  9. java aspose 导出word_使用aspose.word 第三方的插件实现导出word
  10. AxureRP9不同Page使用同一个Master,触发不同事件。
  11. mac下eclipse启动时间插件开发
  12. 企业价值链与价值评价体系:88页华为绩效管理与绩效考核
  13. 神经网络的 Delta 学习规则(learning rule)
  14. PAIP.利用SyncML协议来同步备份手机短信联系人.txt
  15. Silverlight数据驱动模式探索系列 (1)已知列数的DataGrid绑定
  16. 360se html怎么删除,360安全浏览器服务组件能删除吗 如何删除
  17. MapReduce----并行支持向量机(PSVM)第二部分之原始对偶内点法
  18. 关于机器学习中鲁棒性和泛化能力
  19. 大学计算机第四讲答案,大学职业生涯规划课第四讲答案
  20. PHOTOSHOP给MM去斑的最简单方法

热门文章

  1. 实战:基于 CNN 的验证码破解项目(附代码)
  2. 4个可以写进简历的京东 NLP 项目实战
  3. 在OpenCV中使用单应性进行姿势估计
  4. xilinx LVDS使用注意事项
  5. 用python画小猪佩奇(非原创)
  6. Windows Phone 几种页面间传递数据的方式
  7. 解决mac上mariadb不能远程访问的问题
  8. 服务器收到消息怎么推送给app_「刹那问答24」浅谈FCM推送
  9. 记录零基础GO编程入门笔记之一
  10. python牛顿法解非线性方程组_matlab实现牛顿迭代法求解非线性方程组.pdf