首页 > 其他分享 >基础数论学习笔记

基础数论学习笔记

时间:2024-02-27 09:47:05浏览次数:27  
标签:right frac gcd 数论 笔记 学习 therefore bx left

1.辗转相减

利用辗转相减法求最大公约数, 即 \(gcd(a, b)\)。假设 \(a > b\), 则 gcd(a, b) =gcd(a − b, b), 不断的利用大的数减去小的数,就能得到最大公约数。

1.证:若\(n,m(n>m)\)互质,则 $(n-m) , m $互质

若不互质,则设 \(n - m = k * a , m = k * b\)

\(\therefore n-k*b=k*a\)

\(\therefore n=k*(a+b)\),与n,m互质矛盾,得证

我们发现当 a 一直大于 b 的时候,就会一直减去 b,其实就是变成 a%b,所以就变成了辗转相除

2.扩展欧几里得(exgcd)

若\(a,b\)是整数,且\(gcd(a,b)=k\),那么对于任意的整数\(x,y,ax+by\)都一定是k的倍数。

证:一定存在整数\(x,y\),使\(ax+by=gcd(a,b)\)成立。

不太好证,采用数形结合的方法

皮克定理 : 给定顶点坐标均是整点(或正方形格点)的简单多边形,面积\(S\)和内部格点数目\(n\)、多边形边界上的格点数目\(k\):\(S=n+\frac{k}{2} -1\)

\(\because \gcd(a, b)=1\)

\(\therefore AO\)上无整点

在矩形\(ABCO\)中找离\(AO\)最近的格点\(P(n,m)\)

\(\Delta A P O\) 边界上和内部无整点(如果有的话那个点肯定跟优,与假设矛盾)

\(\therefore S\Delta A P O=0+\frac{3}{2}-1=\frac{1}{2}\)

$\because AO=\sqrt{a2+b2} $

\(\therefore PH=\frac{\left |bn-am \right |}{\sqrt{a^2+b^2} }\) (点到直线距离公式)

\(\therefore S\Delta A P O=\frac{1}{2}\sqrt{a^2+b^2} *\frac{\left |bn-am \right |}{\sqrt{a^2+b^2} }=\frac{1}{2}\left |bn-am \right |\)

\(\therefore \left |bn-am \right |=1\)

所以当$\left{\begin{matrix}
x=m \
y=-n
\end{matrix}\right. \(或\)\left{\begin{matrix}
x=-m \
y=n
\end{matrix}\right. $时等式成立

所以当 c 是 gcd(a, b) 的倍数的时候,方程有解,将x,y同时扩大多少倍即可

若\(b*x_{1}+a \bmod b *y_{1}=\gcd(a, b)\)

\(\therefore b*x_{1}+(a-\left \lfloor \frac{a}{b} \right \rfloor *b) *y_{1}=\gcd(a, b)\)

\(\therefore a*y_{1}-b*(x_{1}-\left \lfloor \frac{a}{b} \right \rfloor *y_{1}) =\gcd(a, b)\)

\(\therefore x=y1,y=x_{1}-\left \lfloor \frac{a}{b} \right \rfloor *y_{1}\)

3.乘法逆元

设$ \frac{a}{b} \bmod p = x $

$\therefore \frac{a}{b} \equiv x \bmod p $

$\therefore a \equiv bx \pmod{p} $

设 \(a \bmod p=k_{1}.....n\)

$ bx \bmod p=k_{2}.....n$

\(\therefore k_{1}*p+n=a,k_{2}*p+n=bx\)

\(\therefore k_{2}*p+a-k_{1}*p=bx\)

$\therefore a+p*(k_{2}-k_{1})=bx $

$\therefore p*(k_{1}-k_{2})+bx=a $

既然a,b,p都知道,我们就可以用exgcd啦

4.高斯消元

非常好理解,之前我被 @【数据删除】称为高斯消元高手,为了不负期望,我决定复习一次。

#include<iostream>
using namespace std;
int n,st;
double a[105][105];//第i个方程的第j个未知数的系数
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n+1;j++){
			cin>>a[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		int st=i;
		for(int j=i+1;j<=n;j++){
			if(a[j][i]>a[st][i]){//选取一个最大值减小误差
				st=j;
			}
		}
		for(int j=1;j<=n+1;j++){
			swap(a[i][j],a[st][j]);//i和st对换
		}
		if(a[i][i]==0){
			puts("No Solution");
			return 0;
		}
		for(int j=1;j<=n+1;j++){
			if(i!=j){
           //当前消到第i个未知数,那么当做到第j个方程时,其第i个未
           //知数的系数就是a[j][i],那么这个方程就应该整体减去
           //a[j][i]/a[i][i]倍的方程i
				for(int k=i+1;k<=n+1;k++){//前面已经都是0了
					a[j][k]-=a[i][k]*a[j][i]/a[i][i];
				}
			}
		}
	}
	for(int i=1;i<=n;i++){
		printf("%.2lf\n",a[i][n+1]/a[i][i]);
	}
	
	return 0;
}

逻辑运算

eeeeeeee,学学玩的

  1. 对于一个仅由\(\land\)或\(\lor\)(加不加\(!\))都一样是满足交换律的,枚举易证.

  2. \(!(p \land q)=!p \lor !q\)

  3. \(!(p \lor q)=!p \land !q\)

  4. 韦恩图很厉害,能解决三个命题以下的问题

标签:right,frac,gcd,数论,笔记,学习,therefore,bx,left
From: https://www.cnblogs.com/wuhupai/p/18036191

相关文章

  • 单调队列学习笔记
    WhatIsMonotonicQueue单调队列是一种特殊的队列数据结构,用于维护一定的单调性,通常是单调递增或单调递减。单调队列的主要特点是,队列中的元素满足特定的单调性要求,使得队列的头部元素(或者尾部元素,取决于具体问题)始终是当前队列中的最大(或最小)值。这种特性使得单调队列可以高效......
  • 前中后缀表达式学习笔记
    前言表达式是数学和计算机编程中常见的概念,用于表示运算和计算过程。前缀、中缀和后缀表达式都是不同的方式来表示数学表达式,它们在计算机科学和计算器设计中都有一定的应用。中缀表达式(InfixExpression):这是最常见的数学表达式表示方法,也是人们通常在书写数学公式时使用的方式......
  • Python 机器学习 决策树 数值型特征的处理
    ​ Python机器学习中,特征提取是将原始数据转换为能够被模型有效利用的格式的过程。对于决策树模型而言,特征提取尤其重要,因为好的特征可以显著提升模型的预测性能。在实际应用中,需要根据具体情况选择合适的特征提取方法。数值型特征是机器学习中常见的一种特征类型,它指的是可以......
  • Linux学习-day4
    1.简述操作系统是什么?操作系统就是人与计算机之前交互的介质,有了操作系统,人才能使用计算机;同时,操作系统也是应用程序运行以及用户操作必备的基础环境支撑,是计算机系统的核心。有什么作用?管理和控制计算机系统中的硬件和软件资源,例如,它负责直接管理计算机系统的各种......
  • 寒假学习25
    Scala数组Scala语言中提供的数组是用来存储固定大小的同类型元素,数组对于每一门编程语言来说都是重要的数据结构之一。声明数组变量并不是声明number0、number1、...、number99一个个单独的变量,而是声明一个就像numbers这样的变量,然后使用numbers[0]、numbers[1]、...、n......
  • Vue3学习(十九) - TreeSelect 树选择
    写在前面我知道自己现在的状态很不好,以为放个假能好好放松下心情,结果昨晚做梦还在工作,调试代码,和领导汇报工作。天呐,明明是在放假,可大脑还在考虑工作的事,我的天那,这是怎么了?Vue页面参数传递1、任务拆解页面跳转时带上当前电子书id参数ebookId新增/编辑文档时,读取电子书id......
  • 寒假学习23
    Scala异常处理Scala的异常处理和其它语言比如Java类似。Scala的方法可以通过抛出异常的方法的方式来终止相关代码的运行,不必通过返回值。抛出异常Scala抛出异常的方法和Java一样,使用throw方法,例如,抛出一个新的参数异常:thrownewIllegalArgumentException捕获异......
  • 寒假学习22
    Scala类和对象类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。我们可以使用new关键字来创建类的对象,实例如下:实例class Point(xc: Int,yc:......
  • 寒假学习24
    Scala字符串以下实例将字符串赋值给一个常量:实例object Test {  val greeting: String = "Hello,World!"  def main(args: Array[String]) {   println( greeting )  }}以上实例定义了变量greeting,为字符串常量,它的类型为 String(java.lang.S......
  • 学习python自动化——pytest单元测试框架
    一、什么是pytest单元测试框架,unittest(python自带的),pytest(第三方库)。用于编写测试用例、收集用例、执行用例、生成测试结果文件(html、xml)1.1、安装pytestpipinstallpytest1.2、导入importpytest二、步骤2.1、TestCase(测试用例)2.1.1、创建测试类......