首页 > 其他分享 >笔记——数论

笔记——数论

时间:2024-10-08 10:02:30浏览次数:6  
标签:lfloor frac 函数 数论 rfloor textbf 笔记

蓝月の笔记——数论篇

Part 0 约定

令 \(\mathcal{P}\) 为质数的集合

所有时间复杂度均指上界

Part 1 质数,\(\gcd\)

质数就是只有 \(1\) 和本身两个因数的数,公因数就是同时使多个数的因数的数,\(\gcd\) 就是最大的公因数

质数求法:欧拉筛

在埃氏筛的基础上优化,让每个合数都只被一个质数标记

for (int i = 2; i < kMaxN; i++) {
    if (!vis[i]) {
      pr[++tot] = i;
    }
    for (int j = 1; j <= tot && i * pr[j] < kMaxN; j++) {
      vis[i * pr[j]] = 1;
      if (i % pr[j] == 0) {
        break;     // 如果i是pr[j]的倍数,那么i的倍数也被pr[j]标记过,不用再标记一次
      }
    }
  }

最大公因数可以使用 __gcd() 在 \(O(\log n)\) 的时间求出

Part 2 数论分块

考虑以下式子(\(n \le 10^{12}\)):

\[\displaystyle\sum_{i=1}^{n}\lfloor\frac{n}{i}\rfloor \]

先证明这个式子:使 $$\lfloor\frac{n}{i}\rfloor=\lfloor\frac{n}{j}\rfloor$$ 满足的最大的 \(j\) 是 \(\lfloor\frac{n}{\lfloor\frac{n}{i}\rfloor}\rfloor\)

证明
$$\lfloor\frac{n}{i}\rfloor\le\lfloor\frac{n}{j}\rfloor \Leftrightarrow\lfloor\frac{n}{i}\rfloor\le\frac{n}{j}\Leftrightarrow j\le\frac{n}{\lfloor\frac{n}{i}\rfloor}\Leftrightarrow j\le\lfloor\frac{n}{\lfloor\frac{n}{i}\rfloor}\rfloor$$ $$\text{Q.E.D.}$$

那么我们可以 \(O(\sqrt{n})\) 枚举答案,\(O(1)\) 求出其出现次数,即 \(O(\sqrt{n})\) 解决该问题

// BLuemoon_
#include <bits/stdc++.h>

using  namespace std;
using LL = long long;

LL n, ans, l, r;

int main() {
  for (cin >> n, l = 1; l <= n; r = n / (n / l), ans += (r - l + 1) * (n / l), l = r + 1){
  }
  cout << ans << '\n';
  return 0;
}

AT/UVA

Part 3 数论函数

一些定义域是 \(\mathbb{N}^{*}\) 的函数

常见数论函数

\(\boldsymbol\epsilon(x)=[x=1]\),只有 \(x=1\) 是答案为 \(1\),否则为 \(0\)。是狄利克雷卷积中的单位元,后面会解释

\(\textbf{id}(x)=x\)

\(\textbf{1}(x)=1\)

\(\boldsymbol\sigma(x)=\displaystyle\sum_{d|x}d\),即因数和

\(\boldsymbol\varphi(x)=\displaystyle\sum_{i=1}^{x}[\gcd(i,x)=1]\),即小于等于 \(x\) 的正整数中与 \(x\) 互质的数的个数

令 \(x\) 的唯一分解为 \(x=\displaystyle\prod_{i=1}^{k}p_i^{c_i}\),其中 \(\forall i\in[1,k],p_i\in\mathcal{P},c_i>0\)

\(\boldsymbol\mu(x)= \begin{cases} 1& x=1\\ 0& \exists i\in[1,k],c_i\ge 2\\ (-1)^{k}& \text{else} \end{cases}\)

积性函数

若 \(\forall \gcd(i,j)=1,\textbf{f}(i)\textbf{f}(j)=\textbf{f}(ij)\),则称数论函数 \(\textbf{f}\) 是积性函数

特别地,若 \(\forall i,j\in\mathbb{N^{*}},\textbf{f}(j)=\textbf{f}(ij)\),则称数论函数 \(\textbf{f}\) 是完全积性函数

Part 4 狄利克雷卷积

定义两个数论函数 \(\textbf{f},\textbf{g}\) 的狄利克雷卷积为 \((\textbf{f}*\textbf{g})(x)=\displaystyle\sum_{d|x}\textbf{f}(d)\textbf{g}(\frac{x}{d})\)

标签:lfloor,frac,函数,数论,rfloor,textbf,笔记
From: https://www.cnblogs.com/bluemoon-blog/p/18450959

相关文章

  • 《机器学习初步》笔记 第一章
    第一章绪论1.1引言机器学习的经典定义:利用经验(数据)改善系统自身的性能经典的机器学习过程:机器学习最重要的理论模型:PAC(概览近似正确)1.2基本术语数据集:一组记录的集合学习/训练:通过执行某个学习算法,得到模型,学的的模型对应数据的某种潜在规律示例:不包含结果(标记label)......
  • 机器学习第一章学习笔记
    第一章绪论1.1引言  在计算机系统中,“经验”通常以"数据"形式存在。书中采用"模型"泛指从数据中学得的结果。1.2基本术语  记录的集合称为一个"数据集",每条记录是关于一个事件或对象的描述,称为一个"示例"(instance)或"样本"(samp1e)。(注意:有时候整个数据集也被......
  • HTB-TwoMillion 靶机笔记
    TwoMillion靶机笔记概述HTB上的一台liunx靶机,难度定为了简单级别,它包括了对js接口的信息收集,js反混淆,未授权,越权,命令注入等漏洞。一、nmap扫描1)端口扫描nmap-sT--min-rate10000-p--oports10.10.11.221Nmapscanreportfor10.10.11.221Hostisup(0.37s......
  • 2024.7.26 集训笔记
    单调栈给定一个长度为\(n\)的数列\(a\),对每个数字求出其右/左边第一个值大于等于它的数字的位置。考虑从左到右扫整个序列,维护一个栈,里面存放可能成为答案的数字,当遍历到一个新的数\(a_i\)的时候,可以发现栈中\(\leqa_i\)的数就再也不可能成为答案了,那就把它们弹掉,此时......
  • 珂朵莉树(ODT)学习笔记
    对一个序列进行推平和查询等操作,我们难免会有过这样的想法:只维护连续段即可。但是这只是比较优的暴力,精心构造的数据可以轻松卡掉。事实上,在随机数据下,这样的算法的时间复杂度是\(\mathcal{O}(n\logn)\),这就是颜色段均摊理论,证明不会。根据这个理论产生了珂朵莉树,它可以维护区......
  • 高性能计算学习笔记(1)
    一、程序优化CPU程序优化1.1体系结构:CPU流水线技术、高速缓指令集、CPU超标量设计1.2并行技术:MPI、OpenMP、SIMD、汇编1.3算法:算法优化GPU程序优化1.1GPU的体系结构(计算核心、高带宽、多级存储)1.2GPU并行框架:CUDA、OpenCL、OpenACC1.3并行设计的算法程序优化核心......
  • prometheus学习笔记之PromQL
    prometheus学习笔记之PromQL一、PromQL语句简介官方文档:https://prometheus.io/docs/prometheus/latest/querying/basics/Prometheus提供⼀个函数式的表达式语⾔PromQL(PrometheusQueryLanguage),可以使⽤户实时地查找和聚合时间序列数据,表达式计算结果可以在图表中展示,也可......
  • ABB_800xA学习笔记314:做一个实际的练习1
    国庆节懒了几天尽去玩了,没有学习。我把前段时间在新浪博客记录的内容转发在这里,那里把访问量清零后还没有恢复。原文地址:ABB_800xA学习笔记314:做一个实际的练习1_来自金沙江的小鱼_新浪博客(sina.com.cn)很久没有学习ABB800xA了,现场有一套800xA的设备,如果出了问题还是得区处理......
  • 【笔记】SSTI学习
    【笔记】SSTI学习原文章:尝试黑客攻击|SSTI(tryhackme.com)介绍服务器端模板注入(SSTI)是一种web漏洞攻击,它利用模板引擎的不安全特性实现。什么是模板引擎?模板引擎允许您创建可以在应用程序中重复使用的静态模板文件。这是什么意思?想象一个存储用户信息的页面。在Python......
  • Arduino物联网开发笔记01
    首先将开发板连接电脑然后下载Arduinoide(我的是2.0版的)这是官网的下载链接:https://www.arduino.cc/en/software接着左上角项目新建文件夹编写第一个程序`voidsetup(){Serial.begin(115200);//设置串口波特率}voidloop(){Serial.printf("Helloworld\n");delay(500)......