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

news2024/11/14 3:38:53

零知识证明(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 main

import (
	"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 main

import (
	"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,0

	for ;;{
		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 < numb
			t := numb
			numb = numa
			numa = 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 main

import "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=0
		return a
	}
	x1,y1:= 0,0
	g := exgcd(m,a%m,&x1,&y1)
	*x = y1
	*y = x1 -(a/m)*y1
	return  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,0
	g := 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,0

	for ;;{
		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.coloradmin.cn/o/2078396.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从《黑神话:悟空》看中国3A游戏之路:历史回顾与未来展望

近年来&#xff0c;随着中国游戏行业的不断发展&#xff0c;一款名为《黑神话&#xff1a;悟空》的游戏引发了全球的广泛关注。这款游戏不仅在视觉效果和动作设计上令人惊艳&#xff0c;还被誉为中国3A游戏的里程碑。然而&#xff0c;从《黑神话&#xff1a;悟空》的发布&#…

STM32-PWM驱动呼吸灯——HAL库

&#xff08;根据B站up主keysking的STM32教程视频的笔记&#xff09; 【STM32】动画讲解轻松学会STM32的PWM_哔哩哔哩_bilibili 什么是PWM&#xff1f; PWM&#xff0c;全称为脉冲宽度调制&#xff08;Pulse Width Modulation&#xff09;&#xff0c;是一种调制技术&#xf…

对各项数据的统计汇总,集中展示,便于查看厂区情况的智慧物流开源了。

智慧物流视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。构建基于Ai技术的…

【云原生】Kubernetes中常见的Pod故障排查定位与解决方案

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

3D环绕音效增强软件 Boom3D for Mac v2.0.2 中文破解版下载

Boom3D for Mac 专业的3D环绕音效增强软件中文版&#xff0c;Boom 3D是适用于Mac和Windows系统的专业音效增强软件&#xff0c;旨在通过播放器&#xff0c;媒体或流媒体服务等介质&#xff0c;在不同类型的耳机上以3D环绕效果播放媒体内容。您无需使用昂贵的耳机或其他附加环绕…

第十四章- 面对墙壁

这是最后的例子&#xff1a;一个完整的游戏。 我们添加键盘快捷键并引入鼠标事件到CannonField。我们在CannonField周围放一个框架并添加一个障碍物&#xff08;墙&#xff09;使这个游戏更富有挑战性。 lcdrange.h包含LCDRange类定义lcdrange.cpp包含LCDRange类实现cannon.h…

Linux 必备:“lsof” 命令 —— 解开系统资源的神秘密码

lsof 似侦探&#xff0c;揭示 Linux 中文件进程关系。图文指南助您探索。 lsof应急排查的作用 发现非法连接&#xff0c;检测未经授权的访问或攻击。定位服务故障&#xff0c;查看是否有进程占用关键端口。找出资源占用过高的进程&#xff0c;优化系统性能。追踪恶意软件的异…

博主正在AI+宠物创业中...

最近开始创业啦&#xff0c;csdn上没太大时间一一回复大家&#xff0c;说一声抱歉啦&#xff01; AI宠物创业中&#xff0c;宠有灵犀CTO&#xff0c;北大硕士 双学位 前阿里巴巴达摩院&#xff0c;邮箱17387842007163.com 我们瞄准了宠物赛道&#xff0c;做的是 供应链电商社交…

One-for-All:上交大提出视觉推理的符号化与逻辑推理分离的新范式 | ECCV 2024

通过对多样化基准的严格评估&#xff0c;论文展示了现有特定方法在实现跨领域推理以及其偏向于数据偏差拟合方面的缺陷。从两阶段的视角重新审视视觉推理&#xff1a;&#xff08;1&#xff09;符号化和&#xff08;2&#xff09;基于符号或其表示的逻辑推理&#xff0c;发现推…

罐装食品检测检测系统源码分享 # [一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]

罐装食品检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

一起学习LeetCode热题100道(57/100)

57.电话号码的字母组合(学习) 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 1&#xff1a; 输入&#xff1a;digit…

ETL数据集成丨实现SQLServer数据库的高效实时数据同步

SQL Server&#xff0c;作为一款功能强大的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;在企业级应用中占据着举足轻重的地位。它不仅提供了可靠的数据存储与管理能力&#xff0c;还集成了高级数据分析、报表服务、集成服务以及商业智能等功能&#xff0c;为…

如何使用 500 多个表构建企业级 AI 查询向导

迄今为止的旅程&#xff1a;Confluence Agent 回顾 在深入研究 SQL Agent 之前&#xff0c;让我们先简单回顾一下我们开发的 Confluence Agent&#xff1a; 元数据提取&#xff1a;捕获我们的知识库的结构。内容提取&#xff1a;提取文档的核心内容。格式处理&#xff1a;分离 …

台灯应该买什么样的才能护眼?适合孩子的护眼台灯挑选指南

2022年3月1日起&#xff0c;正式实施的《儿童青少年学习用品近视防控卫生要求》&#xff08;GB 40070-2021&#xff09;规定了与近视防控相关的读写作业台灯卫生要求。台灯应该买什么样的才能护眼&#xff1f;要求从照度、均匀度、显色指数、色温、防蓝光等方面去完善护眼台灯&…

如何利用 Go 语言开发高可用服务

高可用的含义是尽量减少服务的不可用&#xff08;日常维护或者突发系统故障&#xff09;时长&#xff0c;提升服务的可用时长。如何衡量一个服务的可用性呢&#xff1f;或许你也听说过&#xff0c;通常企业可能会要求服务的可用性能能够达到三个 9(也就是 99.9%)或者 4个 9 &am…

手机三要素验证API接口,选择的时候应该注意什么?

在选择手机三要素验证API接口时&#xff0c;为了确保接口的安全性、可靠性和适用性&#xff0c;需要注意以下几个方面&#xff1a; 服务商的合法性和资质 合法性&#xff1a;确保服务商具有合法的经营资质和业务范围&#xff0c;以避免法律风险。 资质认证&#xff1a;查看服务…

运维的理解、定位及其在现代企业中的重要性

在当今数字化转型的大潮中&#xff0c;运维&#xff08;Operation & Maintenance, O&M&#xff09;作为企业IT架构中不可或缺的一环&#xff0c;其角色与职责正经历着深刻的变革。运维不再仅仅是技术层面的支持与维护&#xff0c;而是逐渐演变为一种集技术支持、业务服…

ORM框架:Mybatis与Hibernate

认识ORM ORM, Object-Relationl Mapping&#xff0c;对象关系映射。它的作用是在关系型数据库和对象之间作一个映射。 可以在对象模型和关系型数据库的表之间建立一座桥梁&#xff0c;程序员使用 API 直接操作 JavaBean 对象就可以实现数据的存储、查询、更改和删除等操作。 常…

okhttp异步请求连接阻塞问题排查

表现&#xff1a; 使用okhttp请求外部大模型接口时&#xff0c;当并发在2-5左右&#xff0c;出现请求被阻塞在建立http连接之前&#xff0c;阻塞时间超长&#xff08;>20s&#xff0c;从日志看有160s存在&#xff09;。但是httpconfig的connTimeout时间配置为100s&#xff…

在线客服系统PHP源码免费开源 (搭建教程+全新UI)

安装环境 宝塔面板 php>8.0 mysql5.7 安装搭建 1.建站点 上传程序 2.建数据库 导入数据 3.网站目录/public 伪静态设置 4.修改数据库配置信息 5.修改config.js里的配置信息 6.启动wokerman命令 更详细的搭建教程请下载源码根目录下 安装教程.docx 产品亮点: …