当前位置: 首页 > news >正文

杜教筛原理,实现与时间复杂度分析

引例

洛谷 P4213 【模板】杜教筛

题目描述

给定一个正整数,求

a n s 1 = ∑ i = 1 n φ ( i ) ans_1=\sum_{i=1}^n\varphi(i) ans1=i=1nφ(i)

a n s 2 = ∑ i = 1 n μ ( i ) ans_2=\sum_{i=1}^n \mu(i) ans2=i=1nμ(i)

输入格式

本题单测试点内有多组数据

输入的第一行为一个整数,表示数据组数 T T T

接下来 T T T 行,每行一个整数 n n n,表示一组询问。

输出格式

对于每组询问,输出一行两个整数,分别代表 a n s 1 ans_1 ans1 a n s 2 ans_2 ans2

输入输出样例 #1

输入 #1

6
1
2
8
13
30
2333

输出 #1

1 1
2 0
22 -2
58 -3
278 -3
1655470 2

说明/提示

数据规模与约定

对于全部的测试点,保证 1 ≤ T ≤ 10 1 \leq T \leq 10 1T10 1 ≤ n < 2 31 1 \leq n \lt 2^{31} 1n<231。对于全部的测试点,保证 1 ≤ T ≤ 10 1 \leq T \leq 10 1T10 1 ≤ n < 2 31 1 \leq n \lt 2^{31} 1n<231

题中要求以低于线性的时间复杂度对数论函数求和。

原理

将例写为更一般的形式:

S ( n ) = ∑ i = 1 n f ( i ) S(n)=\sum_{i=1}^{n}f(i) S(n)=i=1nf(i) ,其中, f f f 是数论函数。

构造函数 g g g 并令 h = f ∗ g = g ∗ f h=f*g=g*f h=fg=gf
故,
∑ i = 1 n h ( i ) = ∑ i = 1 n ∑ d ∣ i g ( d ) f ( i d ) = ∑ d = 1 n ∑ d ∣ i n g ( d ) f ( i d ) = ∑ d = 1 n g ( d ) ∑ d ∣ i n f ( i d ) = ∑ d = 1 n g ( d ) ∑ i = 1 ⌊ n / d ⌋ f ( i ) = ∑ d = 1 n g ( d ) S ( ⌊ n / d ⌋ ) = g ( 1 ) S ( n ) + ∑ i = 2 n g ( i ) S ( ⌊ n / i ⌋ ) \begin{align} \nonumber \sum_{i=1}^nh(i) \nonumber &=\sum_{i=1}^n\sum_{d|i}g(d)f(\frac id) \\ \nonumber &=\sum_{d=1}^n\sum_{d|i}^ng(d)f(\frac id) \\ \nonumber &=\sum_{d=1}^ng(d)\sum_{d|i}^nf(\frac id) \\ \nonumber &=\sum_{d=1}^ng(d)\sum_{i=1}^{\lfloor n/d\rfloor}f(i) \\ \nonumber &=\sum_{d=1}^ng(d)S(\lfloor n/d\rfloor) \\ \nonumber &=g(1)S(n)+\sum_{i=2}^ng(i)S(\lfloor n/i\rfloor) \nonumber \end{align} i=1nh(i)=i=1ndig(d)f(di)=d=1nding(d)f(di)=d=1ng(d)dinf(di)=d=1ng(d)i=1n/df(i)=d=1ng(d)S(⌊n/d⌋)=g(1)S(n)+i=2ng(i)S(⌊n/i⌋)
因此,
g ( 1 ) S ( n ) = ∑ i = 1 n h ( i ) − ∑ i = 2 n g ( i ) S ( ⌊ n / i ⌋ ) g(1)S(n)=\sum_{i=1}^nh(i)-\sum_{i=2}^ng(i)S(\lfloor n/i\rfloor) g(1)S(n)=i=1nh(i)i=2ng(i)S(⌊n/i⌋)

采用数论分块加速第二个求和运算,这要求:

  • 可以快速计算 ∑ i = 1 n h ( i ) \sum_{i=1}^nh(i) i=1nh(i)
  • 可以快速计算 ∑ i = l r g ( i ) \sum_{i=l}^rg(i) i=lrg(i)

实现

实现时构造出来的 h , g h,g h,g 已经满足了上述要求,采用记忆化搜索计算 S ( n ) S(n) S(n) ,数论分块加速求和。
众所周知, μ ∗ I = ϵ μ∗I=ϵ μI=ϵ φ ∗ I = i d φ∗I=id φI=id
–>To learn more about it
于是,带入到杜教筛公式中,
I ( 1 ) S ( n ) = ∑ i = 1 n ϵ ( i ) − ∑ i = 2 n I ( i ) S ( ⌊ n / i ⌋ ) I(1)S(n)=\sum_{i=1}^nϵ(i)-\sum_{i=2}^nI(i)S(\lfloor n/i\rfloor) I(1)S(n)=i=1nϵ(i)i=2nI(i)S(⌊n/i⌋)
I ( 1 ) S ( n ) = ∑ i = 1 n i d ( i ) − ∑ i = 2 n I ( i ) S ( ⌊ n / i ⌋ ) I(1)S(n)=\sum_{i=1}^nid(i)-\sum_{i=2}^nI(i)S(\lfloor n/i\rfloor) I(1)S(n)=i=1nid(i)i=2nI(i)S(⌊n/i⌋)
即,
S ( n ) = 1 − ∑ i = 2 n S ( ⌊ n / i ⌋ ) S(n)=1-\sum_{i=2}^nS(\lfloor n/i\rfloor) S(n)=1i=2nS(⌊n/i⌋)
S ( n ) = n ( n + 1 ) 2 − ∑ i = 2 n S ( ⌊ n / i ⌋ ) S(n)=\frac {n(n+1)}2-\sum_{i=2}^nS(\lfloor n/i\rfloor) S(n)=2n(n+1)i=2nS(⌊n/i⌋)
考虑进一步优化,对于前 k k k 项使用线性筛直接计算,可以证明 k = O ( n 2 / 3 ) k=O(n^{2/3}) k=O(n2/3) 最优(证明参见最后一部分)。
在实现中,一般使用 unordered_map/gp_hash_table 进行记忆化。由于常数较大,一般将预处理部分的 k k k 在不炸空间的情况下开得尽量大一些。
以下为C++参考实现,尽管全开了long long并且未经过卡常,常数依然中规中矩,完全可以接受。record link 。

#include <bits/stdc++.h>
#define int long long
using namespace std;const int K=5e6; 
int t,n,vh1[K],vh2[K];
bool notprime[K];
vector<int>prime;
unordered_map<int,int>s1,s2;inline int read(){int s=0;bool f=0;char c=getchar();while(!isdigit(c)){if(c=='-')f^=1;c=getchar();}while(isdigit(c)){s=(s<<1)+(s<<3)+(c^48);c=getchar();}return f==0?s:-s;
}void pre(){vh1[1]=1;vh2[1]=1;for(int i=2;i<K;++i){if(!notprime[i]){prime.push_back(i);vh1[i]=i-1;vh2[i]=-1;}for(int p:prime){if(i*p>=K)break;notprime[i*p]=1;vh1[i*p]=vh1[i]*vh1[p];vh2[i*p]=-vh2[i];if(i%p==0){vh1[i*p]=vh1[i]*p;vh2[i*p]=0; break;}}}for(int i=1;i<K;++i)vh1[i]+=vh1[i-1],vh2[i]+=vh2[i-1];
}int S1(int n){if(n<K)return vh1[n];if(s1[n]!=0)return s1[n];int res=(n+1)*n/2,l=2,r;while(l<=n){r=n/(n/l);res-=S1(n/l)*(r-l+1);l=r+1;}return s1[n]=res;
}int S2(int n){if(n<K)return vh2[n];if(s2[n]!=0)return s2[n];int res=1,l=2,r;while(l<=n){r=n/(n/l);res-=S2(n/l)*(r-l+1);l=r+1;}return s2[n]=res;
}signed main(){pre();t=read();while(t--){n=read();cout<<S1(n)<<" "<<S2(n)<<endl;}return 0;
}

时间复杂度分析

此处伪证极多,点名《算法竞赛》中的“高阶小量”伪证。

先考虑有哪些 S ( i ) S(i) S(i) 会被计算。
设记搜时 S ( i ) S(i) S(i) 会使用 R ( i ) = { j ∣ j = ⌊ i k ⌋ , k ∈ N + , k > 1 } R(i)=\{j|j=\lfloor \frac ik \rfloor,k∈\mathbb{N^+},k>1\} R(i)={jj=ki,kN+,k>1} 中的元素的 S S S

下证若 m ∈ R ( n ) m∈R(n) mR(n) ,则 R ( m ) ⊆ R ( n ) R(m)\subseteq R(n) R(m)R(n)
对于任意 i ∈ R ( m ) i∈R(m) iR(m) , i = ⌊ m x ⌋ i=\lfloor \frac mx \rfloor i=xm
m = ⌊ n y ⌋ m=\lfloor \frac ny \rfloor m=yn
i = ⌊ ⌊ n y ⌋ x ⌋ = ⌊ n x y ⌋ ∈ R ( n ) i=\lfloor \frac {\lfloor \frac ny \rfloor}x \rfloor =\lfloor \frac n{xy} \rfloor ∈R(n) i=xyn=xynR(n)

由上知只有 i ∈ R ( n ) i∈R(n) iR(n) 才会被计算。

下令 T ( n ) T(n) T(n) 为计算 S ( n ) S(n) S(n) 的时间复杂度,并忽略计算 h , g h,g h,g 相关的消耗。则由数论分块相关可知 T ( n ) = n T(n)=\sqrt n T(n)=n

类似数论分块,若 i = ⌊ n x ⌋ ∈ R ( n ) i=\lfloor \frac nx \rfloor∈R(n) i=xnR(n)
i ≤ n i≤\sqrt n in 或 $ i=\lfloor \frac nj \rfloor,j<\sqrt n$ 。

对于朴素的杜教筛(不使用线性筛优化),其时间复杂度为,
∑ i ∈ R ( n ) T ( i ) = ∑ i ∈ R ( n ) i = ∑ i = 1 ⌊ n ⌋ i + ∑ j = 2 ⌊ n ⌋ n j < ∑ i = 1 ⌊ n ⌋ i + n i ≈ ∫ 0 n ( x + n x ) d x = n 3 / 4 \begin{align} \nonumber \sum_{i∈R(n)}T(i)&=\sum_{i∈R(n)}\sqrt i \\ \nonumber &=\sum_{i=1}^{\lfloor \sqrt n \rfloor}\sqrt i + \sum_{j=2}^{\lfloor \sqrt n \rfloor}\sqrt \frac nj \\ \nonumber &<\sum_{i=1}^{\lfloor \sqrt n \rfloor}\sqrt i +\sqrt \frac ni \nonumber \\ &≈\int_0^{\sqrt n}(\sqrt x +\sqrt \frac nx)dx \nonumber \\ &=n^{3/4} \nonumber \end{align} iR(n)T(i)=iR(n)i =i=1n i +j=2n jn i=1n i +in 0n (x +xn )dx=n3/4
即为 O ( n 3 / 4 ) O(n^{3/4}) O(n3/4)

若使用线性筛预处理前 k k k 项,预处理部分时间复杂度为 O ( k ) O(k) O(k) 。当 k > n k>\sqrt n k>n 时时间复杂度变为,
k + ∑ i ∈ R ( n ) , i > k T ( i ) = k + ∑ i ∈ R ( n ) , i > k i = k + ∑ j = 2 ⌊ n / k ⌋ n j < k + ∑ i = 1 ⌊ n / k ⌋ n i ≈ k + ∫ 0 n / k n x d x = k + n k \begin{align} \nonumber k+\sum_{i∈R(n),i>k}T(i)&=k+\sum_{i∈R(n),i>k}\sqrt i \\ \nonumber &=k+ \sum_{j=2}^{\lfloor n/k \rfloor}\sqrt \frac nj \\ \nonumber &<k+\sum_{i=1}^{\lfloor n/k \rfloor}\sqrt \frac ni \nonumber \\ &≈k+\int_0^{n/k}\sqrt \frac nxdx \nonumber \\ &=k+\frac n{\sqrt k} \nonumber \end{align} k+iR(n),i>kT(i)=k+iR(n),i>ki =k+j=2n/kjn k+i=1n/kin k+0n/kxn dx=k+k n
为求上式极值,以 k k k 为自变量求导,令 d O d k = 1 − 1 2 n k − 3 2 = 0 \frac {dO}{dk}=1-\frac 12 nk^{-\frac 32}=0 dkdO=121nk23=0 ,
得到 k = O ( n 2 / 3 ) k=O(n^{2/3}) k=O(n2/3) ,此时总时间复杂度为 O ( n 2 / 3 ) O(n^{2/3}) O(n2/3)

相关文章:

杜教筛原理,实现与时间复杂度分析

引例 洛谷 P4213 【模板】杜教筛 题目描述 给定一个正整数&#xff0c;求 a n s 1 ∑ i 1 n φ ( i ) ans_1\sum_{i1}^n\varphi(i) ans1​i1∑n​φ(i) a n s 2 ∑ i 1 n μ ( i ) ans_2\sum_{i1}^n \mu(i) ans2​i1∑n​μ(i) 输入格式 本题单测试点内有多组数据。 输入的…...

【时时三省】(C语言基础)怎样定义和引用一维数组

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 一维数组是数组中最简单的&#xff0c;它的元素只需要用数组名加一个下标&#xff0c;就能唯一地确定。如上面介绍的学生成绩数组s就是一维数组。有的数组&#xff0c;其元素要指定两个下标才…...

二叉搜索树的最近祖先(递归遍历)

235. 二叉搜索树的最近公共祖先 - 力扣&#xff08;LeetCode&#xff09; class Solution { private:TreeNode*traversal(TreeNode*cur,TreeNode*p,TreeNode*q){if(curNULL){return NULL;}if(cur->val>p->val&&cur->val>q->val){TreeNode*lefttrave…...

蘑菇管理——AI与思维模型【94】

一、定义 蘑菇管理思维模型是一种形象地描述组织对待新员工或初入职场者的管理方式及相关现象的思维模型。它将新员工或初入职场者比作蘑菇&#xff0c;这些人在初期往往被置于阴暗的角落&#xff08;不受重视的部门&#xff0c;或打杂跑腿的工作&#xff09;&#xff0c;浇上…...

Uni-app 组件使用

在前端开发领域&#xff0c;能够高效地创建跨平台应用是开发者们一直追求的目标。Uni-app 凭借其 “一次开发&#xff0c;多端部署” 的特性&#xff0c;成为了众多开发者的首选框架。而组件作为 Uni-app 开发的基础单元&#xff0c;合理运用组件能够极大地提升开发效率和代码的…...

湖北理元理律师事务所:债务优化的合规化探索

在债务处置领域&#xff0c;合法性与有效性往往难以兼得。湖北理元理律师事务所通过标准化服务流程设计&#xff0c;尝试在二者间建立平衡点&#xff0c;其经验为行业提供了可参考的实践样本。 四阶服务模型 1.合规审查 核查债务来源合法性&#xff0c;重点筛查&#xff1a; …...

PISI:眼图1:眼图相关基本概念

0 英文缩写 TIE&#xff08;Time Interval Error&#xff09;时间间隔误差&#xff0c;UI&#xff08;Unit Interval&#xff09;单位间隔PDF&#xff08;Probability Density Function&#xff09;概率密度函数BER&#xff08;Bit Error Rate&#xff09;误码率TJ&#xff08…...

初试C++报错并解决记录

初试C报错并解决记录 报错开始解决问题记录1、考虑应该是没有指定dll位置 无法打开.lib文件1. 应该是没有包含Lib文件 问题解决➡ C 文件需要添加路径的位置记录&#xff1a; 显示调用dll文件位置注意问题解决➡调用位置&#xff1a; 调用人家的.h文件的方法&#xff08;项目使…...

Android运行时ART加载类和方法的过程分析

目录 一,概述 二,ART运行时的入口 一,概述 既然ART运行时执行的都是翻译DEX字节码后得到的本地机器指令了&#xff0c;为什么还需要在OAT文件中包含DEX文件&#xff0c;并且将它加载到内存去呢&#xff1f;这是因为ART运行时提供了Java虚拟机接口&#xff0c;而要实现Java虚…...

【力扣刷题记录】hot100错题本(一)

1. 简单题 我的答案&#xff1a;时间复杂度过高&#xff1a;O(N^3) class Solution:def twoSum(self, nums: List[int], target: int) -> List[int]:for num in nums:if (target - num) in nums:#多余for i in range(len(nums)):if nums[i] num :for j in range(i1,len(nu…...

Android运行时ART加载OAT文件的过程

目录 一,概述 1.1 OAT是如何产生的 一,概述 OAT文件是一种Android私有ELF文件格式&#xff0c;它不仅包含有从DEX文件翻译而来的本地机器指令&#xff0c;还包含有原来的DEX文件内容。这使得我们无需重新编译原有的APK就可以让它正常地在ART里面运行&#xff0c;也就是我们不…...

Python读取comsol仿真导出数据并绘图

文章目录 comsol数据导出python读取文件python绘制云图python进一步分析数据 完整代码 当我们使用comsol&#xff0c;ansys等仿真工具进行仿真后&#xff0c;难免需要对仿真结果进行导出并进一步处理分析。 今天小姜以comsol的一个简单磁场仿真为例&#xff0c;详细介绍如何对c…...

cloudfare+gmail 配置 smtp 邮箱

这里介绍有一个域名后&#xff0c;不需要服务器&#xff0c;就可以实现 cloudfare gmail 的 邮箱收发。 为什么还需要 gmail 的 smtp 功能&#xff0c;因为 cloudfare 默认只是对 email 进行转发&#xff0c;就是只能收邮件而不能发送邮件&#xff0c;故使用 gmail 的功能来进…...

【翻译、转载】使用 LLM 构建 MCP

资料来源&#xff1a; https://modelcontextprotocol.io/tutorials/building-mcp-with-llms 本文仅仅是翻译。 使用 LLM 构建 MCP 利用 Claude 等大型语言模型&#xff08;LLM&#xff09;加速您的 MCP 开发&#xff01; 本指南将帮助您使用 LLM 来构建自定义的模型上下文协…...

Python速成系列二

文章目录 Python 条件语句与循环结构详解一、条件语句&#xff08;if-elif-else&#xff09;1. 基本 if 结构2. if-else 结构3. if-elif-else 结构4. 嵌套条件语句5. 三元表达式&#xff08;条件表达式&#xff09; 二、循环结构1. while 循环2. for 循环3. 循环控制语句break …...

基于STM32的心电图监测系统设计

摘要 本论文旨在设计一种基于 STM32 微控制器的心电图监测系统&#xff0c;通过对人体心电信号的采集、处理和分析&#xff0c;实现对心电图的实时监测与显示。系统采用高精度的心电信号采集模块&#xff0c;结合 STM32 强大的数据处理能力&#xff0c;能够有效去除噪声干扰&a…...

线程池的线程数配置策略

目录 1. CPU密集型任务 2. IO密集型任务 3. 混合型任务 1. CPU密集型任务 特点&#xff1a;任务主要消耗CPU资源&#xff08;如计算、加密、压缩&#xff09;。 推荐线程数&#xff1a; 线程数 ≈ 物理核心数 1 / CPU - 1&#xff08;不知道哪个√&#xff09; 例如&#…...

分享一个Android中文汉字手写输入法并带有形近字联想功能

最近我写了一个Android版本的中文汉字手写输入法功能&#xff0c;并实现了汉字形近字联想功能&#xff0c;此手写输入法功能完全满足公司的需求。 之前小编用Android SurfaceView&#xff0c;运用canvas的Path画坐标轨迹&#xff0c;并结合使用一个叫汉王输入法的so库来识别手…...

C语言:文件操作

文件的概念 文件是计算机用于存储数据的工具&#xff0c;我们计算机磁盘上的数据是混乱的&#xff0c;但是我们计算机系统通过文件的方式记录数据在磁盘上的位置来将数据整齐划分。 文件的类型 文件有两种类型&#xff0c;数据文件与程序文件 程序文件是用来执行的文件&#…...

2024年第十五届蓝桥杯省赛B组Python【 简洁易懂题解】

2024年第十五届蓝桥杯省赛B组Python题解 一、整体情况说明 2024年第十五届蓝桥杯省赛B组Python组考试共包含8道题目&#xff0c;分为结果填空题和程序设计题两类。 考试时间&#xff1a;4小时编程环境&#xff1a;Python 3.x&#xff0c;禁止使用第三方库&#xff0c;仅可使…...

线程与进程深度解析:从fork行为到生产者-消费者模型

线程与进程深度解析&#xff1a;从fork行为到生产者-消费者模型 一、多线程环境下的fork行为与线程安全 1. 多线程程序中fork的特殊性 核心问题&#xff1a;fork后子进程的线程模型 当多线程程序中的某个线程调用fork时&#xff1a; 子进程仅包含调用fork的线程&#xff1…...

2025年第十六届蓝桥杯省赛B组Java题解【完整、易懂版】

2025年第十六届蓝桥杯省赛B组Java题解 题型概览与整体分析 题目编号题目名称题型难度核心知识点通过率&#xff08;预估&#xff09;A逃离高塔结果填空★☆☆数学规律、模运算95%B消失的蓝宝结果填空★★★同余定理、中国剩余定理45%C电池分组编程题★★☆异或运算性质70%D魔法…...

【NTN 卫星通信】NTN关键问题的一些解决方法(一)

1 概述 3GPP在协议23.737中对一些卫星通信需要面对的关键问题进行了探讨&#xff0c;并且讨论了初步的解决方法&#xff0c;继续来看看这些内容把。   问题包括&#xff1a; 1、大型卫星覆盖区域的移动性管理 2、移动卫星覆盖区域的移动性管理 3、卫星延迟 4、卫星接入的QoS …...

C++基础算法9:Dijkstra

1、概念 Dijkstra算法 是一种用于计算图中单源最短路径的算法&#xff0c;主要用于加权图&#xff08;图中边的权重可以不同&#xff09;中找出从起点到各个其他节点的最短路径。 Dijkstra算法的核心概念&#xff1a; 图的表示&#xff1a; 有向图&#xff1a;图的边是有方…...

5块钱的无忧套餐卡可以变成流量卡吗

电信的 5 块钱无忧套餐卡理论上可以变成流量卡&#xff0c;但会受到一些条件限制&#xff0c;以下是具体介绍&#xff1a; 中国电信无忧卡简介 中国电信无忧卡是电信推出的低月租套餐&#xff0c;月租仅 5 元&#xff0c;包含 200M 国内流量、来电显示和 189 邮箱&#xff0c;全…...

word页眉去掉线

直接双击页眉处于下面状态&#xff1a; 然后&#xff1a; 按CtrlshiftN即可&#xff01;去除...

Spark,Idea中编写Spark程序 2

Idea中编写Spark程序 一、修改pom.xml文件 <build><sourceDirectory>src/main/scala</sourceDirectory><testSourceDirectory>src/test/scala</testSourceDirectory> <!-- 添加必要的插件以打包scala程序--><plugins><plu…...

GTID(全局事务标识符)的深入解析

GTID(全局事务标识符)的深入解析 GTID(Global Transaction Identifier)是 MySQL 5.6 版本引入的一项核心功能,旨在解决传统主从复制中的痛点。它通过为每个事务赋予一个全局唯一的标识符,彻底改变了复制的管理方式。 一、传统复制的痛点 在 GTID 出现之前,MySQL 主从…...

Circular Plot系列(一): 环形热图绘制

针对近期多个粉丝咨询环形图的绘制&#xff0c;我意识到&#xff0c;我们似乎没有真正介绍过circle图&#xff0c;但这一类图确是非常常用的图&#xff0c;所以这里详细学习一下circle的绘制&#xff0c;使用的是circlize包&#xff0c;功能很完善&#xff1a;安装包, #https:/…...

字符串匹配 之 KMP算法

文章目录 习题28.找出字符串中第一个匹配项的下标1392.最长快乐前缀 本博客充分参考灵神和知乎的另一位博主 灵神KMP算法模版 知乎博主通俗易懂讲解 对于给定一个主串S和一个模式串P,如果让你求解出模式串P在主串S中匹配的情况下的所有的开始下标简单的做法又称为Brute-Force算…...

「一针见血能力」的终极训练手册

缘起 和顶尖的高手接触以后&#xff0c;发现他们在表达沟通上面的能力真的太强了&#xff0c;仿佛有种一阵见血看问题的能力&#xff0c;这种拨开浓雾看本质的能力是嘈杂世界防止上当受骗的不二法门. 网上找了一些训练方法&#xff0c;可以试试训练锐化思维&#xff0c;提高表…...

Linux 入门:操作系统进程详解

目录 一.冯诺依曼体系结构 一&#xff09;. 软件运行前为什么要先加载&#xff1f;程序运行之前在哪里&#xff1f; 二&#xff09;.理解数据流动 二.操作系统OS(Operator System) 一&#xff09;.概念 二&#xff09;.设计OS的目的 三&#xff09;.如何理解操作系统…...

【2025软考高级架构师】——2024年05月份真题与解析

摘要 本文内容是关于2025年软考高级架构师考试的相关资料&#xff0c;包含2024年05月份真题与解析。其中涉及体系结构演化的步骤、OSI协议中能提供安全服务的层次、数据库设计阶段中进行关系反规范化的环节等知识点&#xff0c;还提及了软考高级架构师考试的多个模块&#xff…...

Mybatis执行流程知多少

思维导图&#xff1a; 一、MyBatis 执行流程概述 MyBatis 的执行流程可以大致分为以下几个关键步骤&#xff1a;配置加载、会话创建、SQL 执行和结果处理。下面我们将逐步详细介绍每个步骤。 二、配置加载 1. 配置文件的重要性 MyBatis 的配置文件是整个框架的基础&#xff0c;…...

码蹄集——偶数位、四边形坐标

目录 MT1039 偶数位 MT1051 四边形坐标 MT1039 偶数位 思路&#xff1a;直接使用按位操作符 一个整型数字是32位,十六进制表示为0x后跟8个字符,每个字符为0-e,代表0-15; 把偶数位改为0,就是用0去&偶数位,用1去&奇数位,即0xAAAAAAAA,A代表10,1010(从右往 左依次为0位,…...

Java 中使用 Callable 创建线程的方法

一、Callable 接口概述​ Callable接口位于java.util.concurrent包中&#xff0c;与Runnable接口类似&#xff0c;同样用于定义线程执行的任务&#xff0c;但它具有以下独特特性&#xff1a;​ 支持返回值&#xff1a;Callable接口声明了一个call()方法&#xff0c;该方法会在…...

代码随想录算法训练营Day44

力扣1045.不相交的线【medium】 力扣53.最大子数组和【medium】 力扣392.判断子序列【easy】 一、力扣1045.不相交的线【medium】 题目链接&#xff1a;力扣1045.不相交的线 视频链接&#xff1a;代码随想录 题解链接&#xff1a;灵茶山艾府 1、思路 和1143.最长公共子序列一…...

Java大师成长计划之第12天:性能调优与GC原理

&#x1f4e2; 友情提示&#xff1a; 本文由银河易创AI&#xff08;https://ai.eaigx.com&#xff09;平台gpt-4o-mini模型辅助创作完成&#xff0c;旨在提供灵感参考与技术分享&#xff0c;文中关键数据、代码与结论建议通过官方渠道验证。 在 Java 编程中&#xff0c;性能调优…...

【MySQL】索引(重要)

目录 一、索引本质&#xff1a; 索引的核心作用 索引的优缺点 二、预备知识&#xff1a; 硬件理解&#xff1a; 软件理解&#xff1a; MySQL与磁盘交互基本单位&#xff1a; 三、索引的理解&#xff1a; 理解page&#xff1a; 单个page&#xff1a; 多个page&#x…...

C++多态(上)

目录 一、多态的概念 二、多态的定义及实现 1. 多态的构成条件 2. 虚函数 3. 虚函数的重写 4. C11 override 和 final 4.1 final 关键字 4.2 override 关键字 5. 重载、覆盖&#xff08;重写&#xff09;、隐藏&#xff08;重定义&#xff09;的对比 三、抽象类 1. 概…...

【AI提示词】 复利效应教育专家

提示说明 一位拥有金融学和教育学背景的知识型内容创作者&#xff0c;擅长用简单易懂的语言向读者解释复杂概念 提示词 # Role: 复利效应教育专家## Profile - language: 中文 - description: 一位拥有金融学和教育学背景的知识型内容创作者&#xff0c;擅长用简单易懂的语言…...

嵌入式系统基础知识

目录 一、冯诺依曼结构与哈佛结构 &#xff08;一&#xff09;冯诺依曼结构 &#xff08;二&#xff09;哈佛架构 二、ARM存储模式 &#xff08;一&#xff09;大端模式 &#xff08;二&#xff09;小端模式 &#xff08;三&#xff09;混合模式 三、CISC 与 RISC &am…...

如何克服情绪拖延症?

引言 你是否也曾有过这样的经历&#xff1f; 明明手头有重要的工作&#xff0c;却总是忍不住刷手机、看视频&#xff0c;直到最后一刻才匆忙赶工&#xff1f; 你是否在心里暗暗发誓“明天一定好好干”&#xff0c;但第二天依旧重复着同样的拖延&#xff1f; 其实&#xff0…...

【操作系统】哲学家进餐问题

问题描述 哲学家进餐问题是并发编程中的一个经典问题&#xff0c;描述了五位哲学家围坐在一张圆桌旁&#xff0c;他们的生活由思考和进餐组成。在圆桌上有五个盘子&#xff0c;每位哲学家面前一个盘子&#xff0c;盘子之间有一支叉子。哲学家进餐需要同时使用左右两支叉子。问题…...

Kotlin协程解析

目录 一、协程的使用 二、协程的执行原理 2.1、挂起函数的反编译代码及执行分析 2.2、协程执行流程分析 2.2.1、createCoroutineUnintercepted方法 2.2.2、intercepted方法 2.2.3、resumeCancellableWith方法 2.3、Dispatcher----分发器的实现 2.3.1、Main 分发器的实…...

Nginx核心功能 02

目录 Nginx代理技术核心概念 &#xff08;一&#xff09;正向代理&#xff08;Forward Proxy&#xff09; 1. 基本定义 2. 技术原理 3. 应用场景 &#xff08;二&#xff09;反向代理&#xff08;Reverse Proxy&#xff09; 1. 基本定义 2. 技术原理 3. 应用场景 一、…...

聊聊对Mysql的理解

目录 1、Sql介绍 1.1、SQL的分类 1.2、数据库的三大范式 1.3、数据表的约束 1.4、约束的添加与删除 2、核心特性 3、主要组件 4、数据结构原理 5、索引失效 6、常用问题 7、优势与局限 前言 MySQL是一个开源的关系型数据库管理系统(RDBMS)&#xff0c;由瑞典MySQL A…...

「Mac畅玩AIGC与多模态17」开发篇13 - 条件判断与分支跳转工作流示例

一、概述 本篇在多节点串联的基础上,进一步引入条件判断与分支跳转机制,实现根据用户输入内容动态走不同执行路径。开发人员将学习如何配置判断节点、定义分支规则,以及如何在工作流中引导执行方向,完成基础的逻辑控制。 二、环境准备 macOS 系统Dify 平台已部署并可访问…...

pycharm terminal 窗口打不开了

参考添加链接描述powershell.exe改为cmd.exe发现有一个小正方形&#xff0c;最大化可以看见了。...

JAVA:使用 MapStruct 实现高效对象映射的技术指南

1、简述 在 Java 开发中,对象之间的转换是一个常见的需求,尤其是在 DTO(数据传输对象)和实体类之间的转换过程中。手动编写转换代码既耗时又容易出错,而 MapStruct 是一个优秀的对象映射框架,可以通过注解生成高效的对象转换代码,从而大大提升开发效率。 本文将介绍 M…...