CSP-JS数学工具箱(一):数论基础推导笔记.docxVIP

  • 3
  • 0
  • 约9.65千字
  • 约 14页
  • 2026-06-24 发布于北京
  • 举报

CSP-JS数学工具箱(一):数论基础推导笔记.docx

CSP-J/S数学工具箱(一):数论基础推导笔记

前言:数学不是用来“背”的,是用来“推导”的

在CSP-J/S的考场上,数论题有一个让无数选手头疼的特点:模板背得再熟,题目稍微一变就不会用。

为什么会这样?因为大多数选手学数论的方式是“背代码”——欧拉筛的板子背下来,gcd的板子背下来,逆元的板子背下来……但从来没有问过自己:欧拉筛凭什么比埃氏筛快?它是怎么保证每个合数只被筛一次的?exgcd的那几个递归参数到底在干什么?

这篇文档的风格和传统的“知识点罗列”完全不同。我们将用**“程序员的数学笔记”**的方式,从零开始推导每一个核心算法——不是教你“怎么写”,而是帮你理解“为什么这么写”。理解了原理,考场上即使忘了模板,也能从推导过程中把代码“推”回来。

本文是“CSP-J/S数学工具箱”系列的第一篇,聚焦数论三大基础工具:素数筛、gcd/exgcd、乘法逆元。每一节都包含完整的推导过程、C++实现以及开箱即用的封装函数。建议你把这篇文章当成一本可以随时翻阅的“手写笔记”——每次复习时,遮住代码部分,尝试自己把推导过程重新走一遍。

一、素数筛:从暴力到欧拉筛的进化之路

1.1问题定义

给定整数n,找出[1,n]范围内的所有素数。

1.2第一阶段:暴力试除法

最朴素的想法:对于每个数i,用2到√i之间的所有整数去试除。如果能整除,i不是素数;否则是素数。

boolisPr

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档