栈的应用之后缀表达式与表达式求值
这学期选了数据结构课,讲到了利用栈进行表达式求值,在此做简单的笔记并进行了简单Python实现。
NTT快速数论变换及其实现
NTT算法和FFT极为相似,所不同之处只是在于选取的数域,对于FFT而言选取了复数域上的单位根来实现分治,而NTT选取的则是一类特殊的有限域上具有类似性质的原根来实现分治。
本文简述NTT原理并以C++实现NTT。
FFT快速傅里叶变换的实现
关于FFT的原理可以参照之前的一篇课程报告:[Report] 基于快速傅里叶变换的大数乘法原理分析
以及_Orchidany的博客:FFT·快速傅里叶变换
本文主要参照该博客实现方式,通过C++实现FFT,对博客中部分内容作了补充说明,包含递归法和迭代法。
RSA算法加密与签名的数学原理
RSA加密算法是一种非对称加密算法,在公开密钥加密和电子商业中被广泛使用。RSA是由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)在1977年一起提出的,RSA 就是他们三人姓氏开头字母拼在一起组成的。
——Wikipedia
RSA算法加密的安全性基于大整数因数分解的复杂度,算法设计思路简单,只用到部分简单初等数论的知识,具有充分的美感,容易让人理解和接受。
本文将阐述RSA算法在进行加密解密和签名时的数学原理,以及RSA算法的安全性。
OI数论初步讲义:整除
本文主要阐述整除及其性质,介绍素数与合数,最大公因数与最小公倍数,配合B站相应视频,兼顾到OI和数学专业书籍知识点的平衡,在尽量保证知识体系完整的情况下内容尽量精简。
讲义写完后感觉费时费神而且照着讲义讲也没多大意义,下次可能不会再写那么详细的了。
相应习题解答在参考文献上都有请自行查阅。
《编程思维与实践》大作业之质数序列迭代器和生成器
本次大作业要求写一个迭代器和一个生成器来生成质数序列。
下面使用轮子优化的埃氏筛实现迭代器和Miller-Rabin素性测试算法实现生成器。前者可以生成2开始的特定范围质数序列,后者可以生成特定数值开始的质数序列。
模意义下乘法逆元的算法实现
求解模意义下的乘法逆元是算法竞赛中的重要内容,通常用于解决模意义下的分数数值表示或者模意义下的除法,本文试图通过扩展欧几里得、费马小定理和欧拉定理、递推、阶乘递推等算法求解乘法逆元。
《编程思维与实践》大作业之聊天机器人TeruBot
本次李骏老师的《编程思维与实践》大作业要求编写一个简易的聊天机器人,我的代码在原有基础上增加了一些情感分析、天气预报等功能,详见注释,代码仅供参考。
中国剩余定理(CRT)及其程序实现
Q:今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?
A:三人同行七十稀,五树梅花廿一枝,七子团圆正半月,除百零五便得知。
可能高二时候我也没想到,这个当时我特别喜欢的算法书上的定理,再次见到是在数学专业课高代上,而不是计算机算法课上。
中国剩余定理又称孙子定理,中国古代求解一次同余式组(见韩信点兵和曹冲养猪)的方法,最早可见于南北朝的数学著作《孙子算经》。
本文给出中国剩余定理的证明及程序实现。