Decimal Recurring Cycles and Cyclic Groups
From the Perspective of Cyclic Groups When the Denominator and 10 are Coprime The process of division is actually the calculation of 10kmod n10^k \mod n10kmodn, which is the remainder of the k-th division. When the remainder is 1, i.e., 10kmod n=110^k \mod n=110kmodn=1, it indicates a cycle. However, this may not be the first cycle, as the remainder might have appeared twice at another number, such as 2, hence the cycle would be shorter. First, consider when 10 and n are coprime, forming...
Haskell(六) Project Euler 练习1-26
Haskell(一)入门Haskell(二)函数式编程Haskell(三) MonadHaskell(四)总结和工具链Haskell(五) 总结和展望Haskell(六) Project Euler 练习1-26 本文会选择一些有意思的 Project Euler 的题目,学习怎么用 Haskell 写算法,并且逐渐学习相关语言和数学知识。前 100 题可以直接分享答案,后续的题目就只给暗示和加密的答案,可以发邮件获取解密方式。 代码仓库:https://github.com/learnerLj/projecteuler P1 显然 3 和 5 的倍数,其实是 3 和 5 的倍数,去除重复算的 15 的倍数。而且 3 的倍数的和,还可以化简成求和公式。 1234sumOfMultiples limit = sumDivisible 3 + sumDivisible 5 - sumDivisible 15 where cumulativeSum n = n * (n + 1) `div` 2 sumDivisible n = n *...
Haskell(五) 总结和展望
Haskell(一)入门Haskell(二)函数式编程Haskell(三) MonadHaskell(四)总结和工具链Haskell(五) 总结和展望Haskell(六) Project Euler 练习1-26 随着我们深入 Haskell 的世界,我们发现它不仅仅是一种编程语言,而是一种带有丰富理论背景的编程范式。Haskell 的设计思想深植于函数式编程的根基,与 Lambda 演算和范畴论紧密相连,体现了逻辑和数学的美学。 Monad:结构化的复杂性管理 在 Haskell 中,Monad 的概念封装了一个层次结构,允许我们在一个定义良好的域内进行操作。Monad 提供了一种方式来构建层次化的结构,支持层次之间的转换。通过 Monad,可以利用自定义的规则进行快速错误处理,无需在每一步都进行错误处理。特别是在 Haskell 中,Monad 以顺序方式组合复杂函数,使不确定的结果、副作用、异常处理都可以通过 Monad 的统一接口进行管理。更进一步,Monad...
Haskell(四)总结和工具链
Haskell(一)入门Haskell(二)函数式编程Haskell(三) MonadHaskell(四)总结和工具链Haskell(五) 总结和展望Haskell(六) Project Euler 练习1-26 总结 安装方式:https://www.haskell.org/ghcup/ 这是最推荐的安装方式,建议都安装上。 特性介绍:https://www.haskell.org/ 如何入门: 理解基础规则,比如不可变性、绑定、递归 学完基本语法,包括列表、元组、类型、模式匹配、Guard 写法、where 用法、let … in 用法、case … of 用法、@ 用法; 理解函数的类型签名 函数柯里化和 folder、map、zip、filter 等高阶函数、lambda 表达式; $ . 的用法 递归的写法习惯 模块和导出, 语言拓展 Data 库中的 List、Char、Map、Set。一些对应的常见操作 ,比如列表的 take drop sum takeWhile group 等,可以等用到再查。 data 自定义类型(包括 product type 和...
(十)Fuzzing 基础
(一)初识软件分析(二)数据流分析基础(三)Datalog和程序分析(四)静态单赋值和稀疏分析(五)过程间分析(六)指向分析(七)抽象解释(八)SMT和符号执行(九)体验静态分析工具(十)Fuzzing 基础 这主要是[1]的阅读总结 Fuzzing 是什么 在众多软件测试技术中,Fuzzing 因其概念的简单性、易于部署以及在发现实际软件漏洞方面的有效性而受到广泛青睐。简而言之,Fuzzing 是使用异常或非预期的输入(称为“fuzz 输入”)来运行待测试的程序(Program Under Test, PUT)的过程。这种 fuzz 输入是 PUT 可能没有预料到的,也就是说,它可能会使 PUT 处理不当,从而触发开发者未预期的行为。 定义 1 (Fuzzing):Fuzzing 是指使用从所谓的“fuzz 输入空间”中抽取的输入来执行 PUT 的过程,这个输入空间超出了 PUT 的预期输入范围。 定义 2 (Fuzz Testing):Fuzz 测试是利用 fuzzing 来检查 PUT 是否违反了某些特定的正确性策略。 定义 3 (Fuzzer):Fuzzer...
How Geth starts its server
交易的签名理解收据receipt理解区块理解交易blockchain核心forkId 解读oracle 原理和实现布隆过滤器原理TxList 解读交易池分析MPT树区块同步geth源码学习——介绍How Geth starts its server When starting up, the Geth client begins by parsing the command line parameters. This process kicks off with the geth function: func geth(ctx *cli.Context) error at cmd/geth/main.go:326 where the geth prepares the metric if enabled. Subsequently, the makeFullNode function takes over. It reads the provided configuration file or command line flags. As a result, it...
区块链相关学习材料
...
信息论与编码
C语言基础乘法逆元信息安全算法基础操作系统基础x86汇编基础信息论与编码 前言 这篇总结和系统性学习地笔记,是基于电子科技大学的《信息论与编码》课程,而我写作的初衷是个人的复习。因此,内容可能不是那么详细,但是我会保证基本上我会在自己理解的基础上,完成这篇文章。随着我自己的理解的加深,可能会出现前后不一致的情况,如果读者感到矛盾,那么请在评论区说明,等我有时间时会继续完善的。 离散信源熵 单符号离散信源是最简单的情况,离散是指信源输出是有限个符号,单符号是指每个符号都是独立的,每次只发出一个符号。 随机变量基础 在单符号离散信源中,每个符号的概率分布可以用一个概率向量来表示。例如,一个三个符号的单符号离散信源可以用以下概率分布表示,符号 A、B、C 之间是相互独立的,即一个符号的出现不会影响到其他符号的出现概率。可以如下的方式抽象成数学模型。 离散随机变量集合:a1,a2,a3{a_1,a_2,a_3}a1,a2,a3,对应概率 P(ai)P(a_i)P(ai),且 0≤P(ai)≤10 \le P(a_i) \le 10≤P(ai)≤1 ,...
Haskell(三) Monad
Haskell(一)入门Haskell(二)函数式编程Haskell(三) MonadHaskell(四)总结和工具链Haskell(五) 总结和展望Haskell(六) Project Euler 练习1-26 前言 我并不是相关数学理论研究者,而是 Haskell 和 Program language 的爱好者,研究水平还比较低,所以理解有错误是可能发生的,非常欢迎交流和指正。文章中引用了其他博客,我都已经明确注明来源和附带链接,如果您是这些博客的作者,也不同意被引用,那么请联系我。本文借用了 GPT4 写作,提供了非常多的指导。AI 正在改变学习的方式。 另外,我希望读者有一定的近世代数基础,也有一定的编程范式的理解,比如函数式语言(FP),特别是代码讲解都是基于 Haskell。由于我并没有实际的 Haskell 开发经验,所以我不熟悉 Monad的实际应用和用法,这篇文章只是给一个 demo,用于了解编程中的 Monad 的概念。 最后,对于 PL 和 software analysis...
x86汇编基础
C语言基础乘法逆元信息安全算法基础操作系统基础x86汇编基础信息论与编码 这是电子科技大学的汇编程序设计的课程复习,由本人总结,主要资源来自 PPT 和自编教材,少部分辅以网上的博客(会给出参考链接)。课程是基于 x86 汇编,汇编语法和汇编器采用 MASM,程序主要是 flat 模式,语法可能和其他的汇编器不同。这篇文章的主要目的是总结和复习,所以可能较为简洁,读者可以在评论区提问,我会不断完善。如果由不准确或者错误的地方,欢迎指正。 微处理器和寄存器简介 由于汇编需要程序员考虑处理器和寄存器的状态,因此了解基本的内容,有利于理解汇编是如何在 CPU 上工作的。汇编语言与机器语言(字节码)是绑定的,大部分指令直接对应 CPU 的指令,因此汇编不具有可移植性,无法在不同的指令架构下运行。 CPU 执行指令 我们学习 CPU,主要是关注 CPU 内的寄存器、访存方式、输入输出。在计算机组成原理中,我们已经学习过 CPU 的概念图,每次运行: 取指令(Instruction Fetch):CPU 发送读取内存的地址,获取指令代码,然后将指令保存在指令寄存器 IR...