零知识证明-基础数学(二)

零知识证明(Zero—Knowledge Proof),是指一种密码学工具,允许互不信任的通信双方之间证明某个命题的有效性,同时不泄露任何额外信息

导数、偏导数 ,互质数,费马小定理,欧拉定理
1 导数
导数是微积分学中的重要概念,表示函数在某一点处的变化率。一元函数f(x)在点x处的导数f’(x)表示当自变量x在x处增加一个很小的量Δx时,函数值f(x)相应地增加的量Δy,即f’(x)=lim(Δx->0)(Δy/Δx)。导数是函数在某一点处的局部性质,可以刻画函数的斜率、单调性、极值、凹凸性等
在这里插入图片描述
f(x)= x2
函数x2 在 x = 3 处的切线斜率是 6
在这里插入图片描述

导数公式 (网上抄的)
在这里插入图片描述
ln10=loge 10, e=2.71828 ln10≈2.303

2 偏导数
多元函数降维时候的变化,比如二元函数固定y,只让x单独变化,从而看成是关于x的一元函数的变化来研究。
f(x,y)=x^2+y
x编导 在这里插入图片描述
y编导 = 1
3 互质数
质因数:一般地说,一个数的因数是质数,就叫做这个数的质因数
18=2×3×3
互质数:两个或几个自然数,当它们的最大公约数是1的时候,这两个或几个数,就叫做互质数(也叫互素数)。
5和7,4和11,8和9,7、11和15,12、20和35

4 费马小定理
如果p是一个质数,而整数a不是p的倍数,则有ap-1≡1(mod p) (就是 a的p-1次数mod p 等于1)
eg:p=7 a=20 207-1= 64000000 64000000 mod 7 = 1 //用计算器算下
a=18 187-1 = 34012224 34012224 mod 7 = 1
a=9 97-1 = 531441 531441 mod 7 = 1
a=12 127-1 = 2985984 2985984 mod 7 = 1
在这里插入图片描述

code

package mainimport ("fmt""strconv"
)func main()  {stringnum := ""fmt.Printf("please input one prime number:")if _,err := fmt.Scan(&stringnum);err !=nil{fmt.Printf("input error")return}primenum,err1 := strconv.Atoi(stringnum)if err1 !=nil{fmt.Printf("input error")return}fmt.Printf("prime number:%v \n",primenum)for ;; {fmt.Printf("please input one integer:")if _,err := fmt.Scan(&stringnum);err !=nil{fmt.Printf("input error")break}intnum,err2:= strconv.Atoi(stringnum)if err2 !=nil{fmt.Printf("input error")break}fmt.Printf("%v mod %v =%v \n",intnum,primenum,intnum%primenum)}fmt.Printf("ready exit \n")}

5欧拉定理
1>欧拉函数 记欧拉函数 φ(n) 为不超过 n 且与 n互质的数的个数
eg:φ(8)=4,因为1,3,5,7均和8互质(互质数:两个或几个自然数,当它们的最大公约数是1的时候)
2> 既约剩余系(简化剩余系S)
定义:说 S是模 n的简化剩余系,是指 S是由 φ(n)个数组成的集合,其中集合中的数都与 n互质且两两模 n不同余(就是余数不重复)
eg:模5的一个简化剩余系是1,2,3,4,
模7的一个简化剩余系是 1,2,3,4,5,6
模10的一个简化剩余系是1,3,7,9,
模18的一个简化剩余系是1,5,7,11,13,17
3>引理
<1>如果n为某一个素数p,则φ§=p-1 见上面的5,7 简化剩余系
<2>如果n=p*g, p,g 为素数 φ(n) =φ§*φ(g)
φ(15) 剩余系 1,2,4,7,8,11,13,14 一共8个
φ(15) = φ(3) * φ(5) = (3-1) * (5-1) = 2 * 4 = 8

<3>如果n为某一个素数p的幂次,那么φ(p^a^)=(p-1)*p^(a-1)^eg:p=7 a=2φ(7^2^) = (7-1)* 7^2-1^φ(7^2^) =  φ(49)   简化剩余系  p-1  个数减去49内 7的倍数的个数 = 49-1  减去 6{7,14,21,28,35,42} = 49-1-6 =42(7-1)  * 7^2-1^   等于  6* 7 = 42

<4>: n=pa1pa2 … pak φ(n)= nk i=1 (1- 1/pi)

公式难打 抄下别人的
在这里插入图片描述
eg: n= 120 = 23 * 3 * 5
φ(120)= 120*(1- 1/2) * (1-1/3)* (1-1/5) = 120 * 1/2 * 2/3 * 4/5 =60 * 2/3 * 4/5 = 40 * 4/5=32

参考 https://zhuanlan.zhihu.com/p/536214853
最大公约数(greatest common divisor,简写为gcd)
定理1
设m是正整数。整数 a满足gcd(a,m)=1.若x 遍历模m的一个既约剩余系,则 ax也遍历模 m 的一个简化剩余系

eg: m=5 a=8
gcd(8,5) = 1
mod5 简化剩余系 1,2,3,4
x 为 简化剩余系 1,2,3,4
ax = 8,16,24,32 mod5 3,1,4,2 = 1,2,3,4 跟mod5 的简化剩余系 一样
定理 2
设m1,m2是两个互质的正整数。如果 x遍历模 m1的一个既约剩余系,
y遍历模m2的一个既约剩余系,则m1
y + m2
x 遍历模 m1 * m2 的一个简化剩余系**
eg: 互质数:两个或几个自然数,当它们的最大公约数是1的时候
m1 = 5 m2=8 40= 5 * 8 = 5 * 23
mod5 简化剩余系 1,2,3,4
mod8 简化剩余系 1,3,5,7
mod40 简化剩余系 1,3,7,9,11,13,17,19,21,23,27,29,31,33,37,39 一共 16个
x = 1,2,3,4
y = 1,3,5,7
5* y + 8 * x = 5 * (1,3,5,7) +8 *(1,2,3,4) = (5,15,25,35) + (8,16,24,32) =
相当于做笛卡尔积
为什么呢,当 y=1时, x = (1,2,3,4) 有4种,而·y 为(1,3,5,7) 所以 4 * 4 =16
在这里插入图片描述

4>欧几里得算法 参考 https://blog.csdn.net/2201_75314884/article/details/131206814
欧几里得算法又称为辗转相除法,是指用于计算两个非负整数a,b的最大公约数。
两个整数的最大公约数是指能够同时整除它们的最大的正整数。
辗转相除法能够实现效果主要基于以下原理:两个整数的最大公约数等于其中较小的数和两数相除余数的最大公约数。
原理用用公式表示为:gcd(a,b) = gcd(b,a mod b)。
其中gcd为最大公约数的英文greatest common divisor的缩写
mod相当于取模运算符%
最大公约数:两个或多个整数共有的最大公约数,用于表示这些整数之间的最大公共因子。
gcd(a,0) = a 注意 a与零的 结果是 a

eg: 求 gcd(8,20) =
1>先用小数字当公约数 ,如果不是 大数 = 大数%小数 (重复这步)
2>如果是 完成
先用8 作为公约数 发现 20有余数
所以 8 不可以
20%8 = 4
用4 作为公约数
8%4 = 0 20%4=0 OK 4是最大公约数
在这里插入图片描述

代码实现

package mainimport ("fmt"
)// n <= m 调佣前 先检查
func gcd(n, m int32) int32{if m	%	n == 0 {return  n}return  gcd(m%n,n)
}func main()  {numa,numb := 0,0for ;;{fmt.Printf("please intpu numbera and numberb:")if _,err := fmt.Scan(&numa,&numb);err !=nil{fmt.Printf("input error,please input interger \n")continue}if numa <= 0 || numb <= 0 {fmt.Printf("input error and exit")break}if numa == numb {fmt.Printf("gcd(%v,%v)=%v \n",numa,numb,numb)continue}if numa ==1  || numb ==1 {fmt.Printf("gcd(%v,%v)=%v \n",numa,numb,1)continue}if numa > numb { //交换 保证  numa < numbt := numbnumb = numanuma = t}fmt.Printf("gcd(%v,%v)=%v \n",numa,numb,gcd(int32(numa),int32(numb)))}fmt.Printf("end \n")
}

5>mod逆元
逆元:在群中存在ab=e(其中为群的某个运算,e为此运算的单位元),则b为a的逆元
mod逆元:定义为1=a*b(mod m),则b为a的模m逆元
(1)求法1 费马小定理(Fermat’s Little Theorem)
费马小定理:若p为素数,则有ap−1≡1(modp) ;
ap−2 ∗ a≡1(modp) ;
ap−2 就是a在mod p意义下的逆元。
eg: a=4 p=7 我们知道 是 逆元 = 2
47-2 = 45 = 1024 mod 7 = 2

(2)判断素数 威尔逊定理(Wilson’s Theorem)
威尔逊定理如下
如果p 为素数那么( p − 1 ) ! ≡ − 1 ( m o d p )
判断
eg: p=7 6!=65432*1 = 720 = 720 mod 7 = 6 -1 mod7 = (1+7)mod7 = 6

(3)求法2 扩展欧几里得
ax+by = gcd(a,b)
当b 为 素数时, ax ≡ 1 mod b
在这里插入图片描述

package mainimport "fmt"//求mod 逆元
//暴力求解  大数不推荐
func modInverse( a  int, mod int)int{for x := 1; x <mod ; x++{if  (a % mod) * (x % mod) % mod  == 1 {return  x}}return 0
}func  exgcd(a,m int,x *int ,y *int )int{//fmt.Printf("a=%v b=%v %v %v \n",a,b,*x,*y)if m == 0 {*x=1*y=0return a}x1,y1:= 0,0g := exgcd(m,a%m,&x1,&y1)*x = y1*y = x1 -(a/m)*y1return  g
}//g 是 a 和 n 的最大公约数
// ax≡g(modn) g==1 有逆元
//当 a、n 互质时,g = 1 g = 1g=1,此时 x 就是解。当 g ≠ 1 , a 关于模 n 的模逆元不存在
//两数互质的充分必要条件是两数的最大公约数为 1
func inv(a,m int )int  {x,y := 0,0g := exgcd(a,m,&x,&y)if g != 1{fmt.Printf("inv not exist \n")return -1}if  x < 0 {x += m}return  x % m}func main()  {numa,nummod := 0,0for ;;{fmt.Printf("please intpu number and modnumber:")if _,err := fmt.Scan(&numa,&nummod);err !=nil{fmt.Printf("input error,please input interger \n")continue}if numa <= 0 || nummod <= 0 {fmt.Printf("input error and exit")break}fmt.Printf("mod inv(%v,mod %v)=%v \n",numa,nummod,inv(numa,nummod))}fmt.Printf("end \n")
}

手算 逆元
参考 https://blog.csdn.net/Drifter_Galaxy/article/details/107593707
在这里插入图片描述

(2)欧拉定理
欧拉定理:若a、b互素,则有 a φ(b) ≡1(mod b) (费马小定理的一般形式)
aφ(b)-1 ∗ a≡1(mod b)
aφ(b)−1 就是a在mod b意义下的逆元。
求5模26的逆元 φ(b) 表示 简化剩余集 元素个数
在这里插入图片描述
在这里插入图片描述
6:如果觉得有用,麻烦点个赞,加个收藏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/413634.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

科研绘图系列:R语言组合图形绘图

介绍 柱状图、箱线图和棒棒图组合 加载R包 # Library library(ggplot2) library(dplyr) library(forcats)读取数据 data <- data.frame(name=c("north","south","south-east","north-west","south-west","north…

jquery下载的例子如何应用到vue中

参考测试圈相亲平台开发流程&#xff08;4&#xff09;&#xff1a;选个漂亮的首页 (qq.com) 下载的文件夹解压到v_love项目的pubilc下的static文件夹内&#xff0c;这里放的都是我们的静态资源。 打开文件夹内的index.html&#xff0c;我们先确定下它是不是我们要的东西&…

基于yolov10的PCB检测算法研究

内容&#xff1a;项目将YOLOV10创新后的PCB检测算法成功部署到GD32H757上&#xff0c;实现PCB缺陷的工业产线实时检测。 项目主要支持开源代码&#xff1a;HomiKetalys/gd32ai-modelzoo: Provide deployable deep learning models on gd32 (github.com) &#xff08;想了解将…

信息打点-红队工具篇FofaQuakeKunyuSuize水泽Arl灯塔

知识点&#xff1a; 1、网络空间四大引擎-Fofa&Quake&Shodan&Zoomeye 2、自动化信息收集项目-ARL灯塔&Suize水泽&Kunyu坤舆 3、单点功能信息收集项目-企查&子域名&指纹识别&社工信息 黑暗引擎&#xff1a; https://fofa.info https://qua…

GPT-4 vs LLaMA3.1:核心技术架构与应用场景对比

目录 前言 一、GPT-4 的核心技术架构 1.1 Transformer 结构概述 1.2 GPT-4 的主要组成部分 1.3 GPT-4 的创新与改进 二、LLaMA3.1 的核心技术架构 2.1 模型概述 2.2 LLaMA3.1 的主要组成部分 2.3 LLaMA3.1 的创新与改进 三、GPT-4 和 LLaMA3.1 的主要差异 3.1 模型规…

Native开发与逆向第五篇 - hook log打印

开发demo 新建native项目&#xff0c;实现log打印字符串。 下载地址&#xff1a;https://download.csdn.net/download/u013170888/89698015 #include <android/log.h> #define LOGI(...) __android_log_print(ANDROID_LOG_INFO, "JNI_LOG", __VA_ARGS__)exte…

WireShark网络分析~部署方式

一、《Wireshark网络分析就这么简单》 第一章学习 声明&#xff1a;文章只限于网络学习和实验&#xff0c;请遵守《网络安全法》。 第一章问题一&#xff1a;两台服务器A和B的网络配置如下(见图1)&#xff0c;B的子网掩码本应该是255.255.255.0&#xff0c;被不小心配成了255.…

深入解析C#中的锁机制:`lock(this)`、`lock(privateObj)`与`lock(staticObj)`的区别

前言 在C#的多线程编程中&#xff0c;lock关键字是确保线程安全的重要工具。它通过锁定特定的对象&#xff0c;防止多个线程同时访问同一块代码&#xff0c;从而避免数据竞争和资源冲突。然而&#xff0c;选择适当的锁对象对于实现高效的线程同步至关重要。本文将深入探讨使用…

无人机之电池篇

无人机电池作为无人机的重要组成部分&#xff0c;其性能、使用、保养及选择都至关重要。以下是对无人机电池的综合介绍&#xff1a; 一、无人机电池的基本参数 电池容量&#xff1a;电池容量直接影响无人机的续航能力。大容量电池&#xff0c;如5000mAh的电池&#xff0c;能提…

Python模块内容总结

参考&#xff1a; Python 模块 | 菜鸟教程 (runoob.com) Python 模块(Module)&#xff0c;是一个 Python 文件&#xff0c;以 .py 结尾&#xff0c;包含了 Python 对象定义和Python语句。 模块让你能够有逻辑地组织你的 Python 代码段。 把相关的代码分配到一个模块里能让你的代…

「OC」初识MVC —— 简单学习UITableView的解耦

「OC」初识MVC —— 简单学习UITableView的解耦 文章目录 「OC」初识MVC —— 简单学习UITableView的解耦写在前面认识MVC解耦数据源代理 创建cell的基础类创建section的相关类分离数据源分离代理总结参考资料 写在前面 最近在学习了解MVC&#xff0c;然后开始发现&#xff0c…

搭建数据库启前后端环境

1、 安装postgre&#xff0c;修改pg_hba.conf文件 2、安装dbeaer 3、任务管理器-服务&#xff1a;查看是否启动postgresql-x64-11 4、连接测试&#xff1a;新建数据库连接 http://127.0.0.1:14269/browser/# pgAdmin等于dbeaver 5、创建数据库&#xff1a; 6、启动后端…

【读书笔记-《30天自制操作系统》-12】Day13

本篇的内容仍然是定时器的相关讲解。上一篇内容中对于中断程序做了许多优化&#xff0c;但是这些优化到底起了多少作用呢&#xff1f;本篇用一种测试方法来进行测试。然后本篇继续引入链表与哨兵的概念&#xff0c;进一步加快超时的中断处理。 1. 主程序简化 开发过程到了这…

反向迭代器:reverse_iterator的实现

目录 前言 特点 注意事项 实现 构造函数 功能函数 在list与vector中的使用 vector list 前言 反向迭代器是一种在序列容器的末尾开始&#xff0c;并向前移动至序列开始处的迭代器。在C中&#xff0c;反向迭代器由标准库中的容器类提供&#xff0c;比如vector、list、d…

问题记录之Qt Creator下qDebug中文乱码

前言 环境如下 Windows11Qt5.14.2 MingWQt Creator 4.11.1 现象如下,调试模式下qDebug输出中文乱码 运行模式下&#xff0c;qDebug输出中文正常显示 解决记录 第一步 升级Qt Creator&#xff0c;由Qt Creator 4.11.1升级为Qt Creator 13.0.2 &#xff0c;此时效果如下…

【深入理解SpringCloud微服务】深入理解微服务配置中心原理,并手写一个微服务配置中心

【深入理解SpringCloud微服务】深入理解微服务配置中心原理&#xff0c;并手写一个微服务配置中心 为什么要使用配置中心配置中心原理如何手写一个配置中心使用PropertySourceLocator监听配置变更&#xff0c;刷新配置 实现一个微服务配置中心服务端库表ConfigCenterController…

Redis从入门再再到入门(下)

文章目录 1.Redis远程连接1.1 Redis远程连接配置1.2 通过桌面版图形化界面连接Redis1.3 通过IDEA中的插件连接Redis 2.Jedis的基本使用2.1 jedis概述2.2 jedis的基本操作2.3 jedis连接池 3.Spring整合Redis3.1 新建maven工程,引入相关依赖3.2 redis.properties3.3 spring-redis…

Python基础性知识(中部分)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言1、Python中的语句1.1 顺序语句1.2 条件语句1.3 循环语句1.3.1 while循环1.3.2 for循环1.3.3 break与continue语句 1.4 综合三大语句制作小游戏--人生重开模拟器…

算法设计与分析:实验五 图论——桥问题

实验内容&#xff1a; 1. 桥的定义 在图论中&#xff0c;一条边被称为“桥”代表这条边一旦被删除&#xff0c;这张图的连通块数量会增加。等价地说&#xff0c;一条边是一座桥当且仅当这条边不在任何环上。一张图可以有零或多座桥。 2. 求解问题 找出一个无向图中所有的桥…

若依,前后端分离项目,部署到服务器

1.后端项目用maven打包 正式服的话&#xff0c;测试不用加。 application.yml加上context-path: /prod-api 一定要选择root的ruoyi&#xff0c;他会把你自动打包其他模块的依赖 全部成功。然后去ruoyi-admin拿到这个包&#xff0c;java -jar ruoyi-admin.jar就可以了 将jar上…