RNS(Residue Number System)介绍

目前RNS并没有一个正式的中文名,若有,请各位大佬指正。

简介

简而言之,剩余数系统就是将一个大一点的数A∈ZQA\in \mathcal{Z}_QA∈ZQ​,用好几个小一点的数来表示:A←{a0,a1,...,ak}∈Zqik,A\gets \{a_0,a_1,...,a_k \}\in \mathcal{Z}_{q_i}^k,A←{a0​,a1​,...,ak​}∈Zqi​k​,
其中a0≡Amodq0,a1≡Amodq1,⋯,ak≡Amodqka_0 \equiv A\bmod q_0,a_1\equiv A\bmod q_1,\cdots,a_k \equiv A \bmod q_ka0​≡Amodq0​,a1​≡Amodq1​,⋯,ak​≡Amodqk​。Q=q0⋅q1⋯qkQ=q_0\cdot q_1 \cdots q_kQ=q0​⋅q1​⋯qk​。要求i≠j,gcd(qi,qj)=1i\ne j,gcd(q_i,q_j)=1i​=j,gcd(qi​,qj​)=1,即qiq_iqi​之间两两互素。

应用

剩余数系统目前我所知道的应用是用来进行大整数表示以及运算,比如目前的计算机系统中,int类型的数据结构是32/64比特的,那么假如我有一个235比特的数字A∈ZQ,log⁡2(Q)≈235,e.g.log⁡2(Q)<252A\in \mathcal{Z}_Q,\log_2(Q)\approx 235,e.g. \ \log_2(Q)<252A∈ZQ​,log2​(Q)≈235,e.g. log2​(Q)<252,我就可以用4个63比特的int类型数据来表示这个大整数a0,a1,a2,a3a_0,a_1,a_2,a_3a0​,a1​,a2​,a3​。ai=Amodqi∈Zqilog⁡2(qi)=63a_i= A\bmod q_i \in \mathcal{Z}_{q_i} \log_2(q_i)=63ai​=Amodqi​∈Zqi​​log2​(qi​)=63。
假设我要做两个252位以内的大整数的加法或乘法,比如A∈ZQ,B∈ZQA\in \mathcal{Z}_Q,B\in \mathcal{Z}_QA∈ZQ​,B∈ZQ​,C=A+BC=A+BC=A+B就可以表示为ci=ai+bic_i=a_i+b_ici​=ai​+bi​,C=A×BC=A\times BC=A×B也就可以表示为ci=ai×bic_i=a_i\times b_ici​=ai​×bi​,而如果采用中国剩余定理对cic_ici​进行恢复的话,就可以得到正确的结果CCC。就我所知,算上拆分和CRT恢复的时间,也比直接在大整数运算上快。所以可以用RNS在计算机上来加速大整数的运算。

举例

假如有一个数157,而我们的计算机居然只支持表示5比特的数(假如),也就是他uint类型的UINT_MAX为25−1=312^5-1=3125−1=31。那我们找到了这样两个互素的数17,23,那就可以将157表示为{4,19}\{4,19\}{4,19},其中4=157mod17,19=157mod234=157 \bmod 17, 19 = 157 \bmod 234=157mod17,19=157mod23。
通过中国剩余定理,我们可以来恢复一下原数,已知:
{4=xmod1719=xmod23\left\{ \begin{aligned} 4 = x\bmod 17\\ 19 = x\bmod 23 \end{aligned} \right.{4=xmod1719=xmod23​
那么可以求
x=4∗23∗3+19∗17∗19=6413≡157mod(17∗23=391)x = 4*23*3+19*17*19=6413\equiv 157 \bmod(17*23=391)x=4∗23∗3+19∗17∗19=6413≡157mod(17∗23=391)
其中19是17模23的逆元,3是23模17的逆元。

那假如我们要计算157+35=192mod391157+35=192 \bmod 391157+35=192mod391,以及21=157∗35mod39121=157*35 \bmod 39121=157∗35mod391
那我们将35也进行RNS表达为{1,12}\{1,12\}{1,12},
5=1+4mod17,8=19+12mod234=1×4mod17,21=19×12mod235=1+4 \bmod 17, 8=19+12 \bmod 23\\ 4=1\times 4 \bmod 17, 21 = 19\times12 \bmod 23 5=1+4mod17,8=19+12mod234=1×4mod17,21=19×12mod23
我们分别对{5,8}\{5,8\}{5,8},{4,21}\{4,21\}{4,21}进行CRT恢复,神奇的事情发生啦,恢复的结果正好为192192192和212121。

这里举的例子可能不太恰当,因为157∗35157*35157∗35已经超出了17∗2317*2317∗23了,如果考虑用多个模数来表示,而不是两个,157∗35157*35157∗35就不会超过17∗23∗27∗2917*23*27*2917∗23∗27∗29,那么就可以得到正确的乘积值而不是模掉391391391的值了。

RNS (Residue Number System) 剩余数系统相关推荐

  1. SEAL全同态加密开源库(七) rns剩余数系统-源码解析

    SEAL全同态加密开源库(七) rns剩余数系统-源码解析 2021SC@SDUSC 2021-11-14 前言 这是SEAL开源库代码分析报告第六篇,本篇将分析util文件夹中的rns.h和rns. ...

  2. UNIX Time Sharing System - UNIX分时系统翻译

    个人博客原文:UNIX Time Sharing System - UNIX分时系统翻译 NOTE:UNIX Time Sharing System一文的作者为Dennis M. Ritchie 和 ...

  3. [译]5.1. System Initialization Overview 系统初始化简介

    目录:http://www.cnblogs.com/WuCountry/archive/2008/11/15/1333960.html   [不提供插图,读者最好从网上下载源书] 5.1. Syste ...

  4. 【Android 逆向】Android 系统文件分析 ( /system/ 系统命令和系统应用数据目录 | /system/app/ 系统应用目录 | sys Linux 系统内核文件目录 )

    文章目录 一.system 系统命令和系统应用数据目录 1./system/app/ 系统应用目录 2./system/framework/ 框架目录 3./system/font/ 字体目录 二.s ...

  5. UVA11398 The Base-1 Number System【进制】

    As we know, in an n-based number system, there are n different types of digits. In this way, a 1-bas ...

  6. 广数系统980tdb系统说明书_不同数控系统中各个倒角指令的用法

    其实所谓的倒角就是在两轮廓之间加入一段直线或圆弧,使两轮廓间实现光滑的过渡,一般在各个CAD软件中都具有倒角功能,可提高绘图效率.同样,在各个数控系统中也有倒角(直线.圆弧)功能,通常是在G01或G0 ...

  7. IBM 3250 m5重装linux,IBM/Lenovo System x3650 M5 系统全新安装教程

    <IBM/Lenovo System x3650 M5 系统全新安装教程>由会员分享,可在线阅读,更多相关<IBM/Lenovo System x3650 M5 系统全新安装教程(3 ...

  8. AIS (Automatic Identification System)船舶自动识别系统

    AIS简介      AIS (Automatic Identification System)船舶自动识别系统,是一种安装于船舶上的无线电通信导航避碰设备,可适用于内河.港口及外海等各类船舶. AI ...

  9. System.ComponentModel.Win32Exception: 系统找不到指定的文件

    问题描述: System.ComponentModel.Win32Exception: 系统找不到指定的文件.    在 System.Diagnostics.Process.StartWithShe ...

最新文章

  1. linux nat 端口,linux – iptables nat只是端口25?
  2. UI培训教程分享:常用的商业插画风格有哪些?
  3. 数据链路层和传输层的区别
  4. linux-centos7 常用的基本命令--文件内容查看、硬链接和软链接
  5. 如何快速找出找出两个数组中的_看动画学算法之:排序-快速排序
  6. [转]Hibernate不能自动建表解决办法及Hibernate不同数据库的连接及SQL方言
  7. 全开源JAVA支付系统/jeepay聚合支付四方支付系统
  8. GPU共享方案 显卡无用了
  9. python长度转换编程_python长度转换代码1000m_Python实现制度转换(货币,温度,长度)...
  10. macbook air上安装ubuntu双系统
  11. linux源码在线阅读工具
  12. 支付宝集五福最全攻略,五分钟集齐五福!
  13. Go语言解析Json(使用jsonparser)
  14. Mac教程:如何开启任何来源选项?
  15. RDMA简介相关内容
  16. 央视网商城app_央视网商城“中国好产品联合招商大会”召开
  17. 我的职业观——HP大中华区总裁孙振耀退休感言
  18. 怎么在pc端浏览器调试移动端页面
  19. 写综述如何降低查重率?
  20. C语言atof()函数:将字符串转换为double(双精度浮点数)

热门文章

  1. JustAuth于2019年7月21日正式喜提码云【GVP 】称号!
  2. Git (五) ------- IDEA 集成 Git
  3. 二元logit回归分析
  4. OPC与OPC UA
  5. 李嘉诚申报减持2221.6万股南航套现2.9亿
  6. c语言难题大全,C语言50道问题
  7. 多态Class对象注册工厂反射动态代理
  8. win7 蓝屏 0x000000c5
  9. java中M格式_Java中Date日期字符串格式的各种转换
  10. google android win10 ios,微软大挖谷歌墙角 Android机上将可刷Win10