CSP-S 难度的数学方法讲解:分解质因数的运用、欧拉函数、逆元、组合数

5个4000比特大状态置换算法的设计与分析 下面是 5 个概念性、实验性的 4000 位可逆置换设计。它们都保证是双射,但未经过密码分析,不可直接用于生产系统。风格分别覆盖:三维 SPN、Feistel、可逆元胞自动机、ARX、宽轨迹/Keccak 式结构。 这 5 个设计分别代表了 SPN、Feistel、元胞自动机、ARX、宽轨迹 Keccak 五种不同风格,覆盖了主流大状态置换的构造思路。再次强调:它们只是实验性概念,若要用于实际协议,必须经过严格安全性分析。 阅读详情

一、分解质因数的运用

我们知道,根据唯一分解定理,对于一个数 a∈Za\in \bold{Z}a∈Z ,满足存在唯一的 a=∏i=1Napiαia=\displaystyle\prod_{i=1}^{N_a}p_i^{\alpha_i}a=i=1∏Na​​piαi​​ 其中 NaN_aNa​ 为 aaa 的质因数个数, ∀1≤i≤Na,pi\forall 1 \le i \le N_a, p_i∀1≤i≤Na​,pi​ 都是质数。这个性质不仅可以用来分解质因数,也可以用于解决其他所有与质因数有关的问题。由质因数的性质,我们可以推导出几个重要推论。

1. 一个数的因数个数

结论:假设一个数的因数个数为 fac(x)\text{fac}(x)fac(x) ,则 fac(x)=∏i=1Nx(αi+1)\text{fac}(x)=\displaystyle\prod_{i=1}^{N_x}(\alpha_i+1)fac(x)=i=1∏Nx​​(αi​+1) 。

证明:考虑将这个数的每个因数分别分解质因数。可以知道,这个数的质因数集合一定是 xxx 的质因数集合的子集。用 xxx 的质因数分解表示 xxx 的所有因数为:1,p1,⋯ ,p1α1,p2,⋯ ,p1p2,p12p2,⋯1,p_1,\cdots,p_1^{\alpha_1},p_2,\cdots,p_1p_2,p_1^2p_2,\cdots1,p1​,⋯,p1α1​​,p2​,⋯,p1​p2​,p12​p2​,⋯ 。因此,根据乘法原理,对于 xxx 的每个质因子 pip_ipi​,可以取 0∼αi0 \sim \alpha_i0∼αi​ 个与所取其他质因子相乘组成 xxx 的一个因数,即 xxx 的质因子个数 fac(x)=∏i=1Nx(αi+1)\text{fac}(x)=\displaystyle\prod_{i=1}^{N_x}({\alpha}_i+1)fac(x)=i=1∏Nx​​(αi​+1) 。

求一个数的因数个数,代码如下。

template<typename _Tp>
inline long long countFactors(const _Tp& x, const int mod = 998644353)
{
	vector<int> a(sqrt(x) + 1);
	for (int i = 2; i <= sqrt(x); ++i)
		if (x % i == 0)
			while (x % i == 0)
			{
				a[i]++;
				x /= i;
			}
	long long ans = 1;
	for (int i = 2; i <= sqrt(x); ++i)
		ans = (ans * a[i]) % mod;
	return ans;
}

时间复杂度: O(x⋅log⁡x)O(\sqrt{x}\cdot \log x)O(x​⋅logx)
推论: fac(n!)=∑T=1Nn!∑i=1αpT⌊n!pTi⌋\text{fac}(n!)=\displaystyle{\sum_{T=1}^{N_{n!}}\sum_{i=1}^{\alpha_{p_T}}\lfloor {\frac{n!}{p_T^i}} \rfloor}fac(n!)=T=1∑Nn!​​i=1∑αpT​​​⌊pTi​n!​⌋ 。

2. 一个数的因数之和

经过上面的证明,我们应该不难得出这个结论:设一个数的因数之和为 sumfac(x)\text{sumfac}(x)sumfac(x) ,则 sumfac(x)=∏i=1Nx∑j=0αipij\text{sumfac}(x)=\displaystyle{\prod_{i=1}^{N_x}\sum_{j=0}^{\alpha_i}p_i^j}sumfac(x)=i=1∏Nx​​j=0∑αi​​pij​

证明:因为每个因数可以取 0∼αi0 \sim \alpha_i0∼αi​ 个,所以分别选取 0∼αi0 \sim \alpha_i0∼αi​ 个相乘即可。该公式还可以根据等比数列的求和公式进一步优化为 sumfac(x)=∏i=1Nxpiαi+1−pipi−1\text{sumfac}(x)=\displaystyle{\prod_{i=1}^{N_x}\frac{p^{\alpha_i+1}_i-p_i}{p_i-1}}sumfac(x)=i=1∏Nx​​pi​−1piαi​+1​−pi​​ 。

求一个数的因数之和,代码如下。

template<typename _Tp>
inline long long countFactors(const _Tp& x, const int mod = 998644353)
{
	vector<int> a(sqrt(x) + 1);
	for (int i = 2; i <= sqrt(x); ++i)
		if (x % i == 0)
			while (x % i == 0)
			{
				a[i]++;
				x /= i;
			}
	long long ans = 1;
	for (int i = 2; i <= sqrt(x); ++i)
	{
		long long fac = 0;
		for (int j = 0; j < a[i]; ++j)
			fac += pow(p[i], j);
		ans = ans * fac % mod;
	}
		
	return ans;
}

时间复杂度: O(x)O(x)O(x) ,并可以根据等比数列求和公式和逆元继续优化至 O(x⋅log⁡x)O(\sqrt{x} \cdot \log x)O(x​⋅logx) 。

3. 其他运用

例题: 给定 n∈Zn \in \bold{Z}n∈Z ,求 (x,y)(x,y)(x,y) 的组数。其中 , (x,y)(x,y)(x,y) 满足 1x+1y=1n!\displaystyle{\frac{1}{x}+\frac{1}{y}}=\frac{1}{n!}x1​+y1​=n!1​ 。
方程变形为: x+yxy=1n!\displaystyle{\frac{x+y}{xy}=\frac{1}{n!}}xyx+y​=n!1​ ,分离变量得 y=xn!x−n!=n!+n!2x−n!y=\displaystyle\frac{xn!}{x-n!}=n!+\frac{n!^2}{x-n!}y=x−n!xn!​=n!+x−n!n!2​ ,因此我们只需要求出 n!2n!^2n!2 的因数数量即可。

#include <bits/stdc++.h>

using namespace std;

const int MOD = 1e9 + 7;

int main()
{
    int n;
    scanf("%d", &n);

    vector<int> primes;
    vector<int> vis(n + 1);
    for (int i = 2; i <= n; ++i)
    {
        if (!vis[i]) primes.push_back(i);
        for (int j = 0; primes[j] * i <= n; ++j)
        {
            vis[primes[j] * i] = 1;
            if (i % primes[j] == 0) break;
        }
    }
    long long ans = 1;
    for (int i = 0; i < primes.size(); ++i)
    {
        int x = n;
        long long res = 0;
        while (x)
        {
            res += x / primes[i];
            x /= primes[i];
        }
        ans = (ans * (2 * res + 1)) % MOD;
    }

    cout << ans << endl;

    return 0;
}

时间复杂度: O(φ(n))O(\varphi(n))O(φ(n)) 。

二、欧拉函数

欧拉函数是一个积性函数,定义如下:
φ(x)=∑i=1x[gcd⁡(i,x)=1]\varphi(x)=\sum_{i=1}^{x}[\gcd(i,x)=1]φ(x)=i=1∑x​[gcd(i,x)=1]
也就是说,欧拉函数等于小于一个数并且与这个数互质的数的个数。
使用数学方法计算 φ\varphiφ 的公式:
φ(x)=x⋅∏i=1Nxpi−1pi\varphi(x)=x\cdot \prod_{i=1}^{N_x} \frac{p_i-1}{p_i}φ(x)=x⋅i=1∏Nx​​pi​pi​−1​

1. 使用欧拉筛求 φ\varphiφ

因此, φ\varphiφ 可以使用欧拉筛筛出:

inline void getPhi(const int& n)
{
	vector<int> primes(n + 1);
	vector<int> vis(n + 1);
	vector<double> phi(n + 1);
	phi[1] = 1;
	for (int i = 2; i <= n; ++i)
	{
		phi[i] *= i;
		if (!vis[i]) 
		{
			primes.push_back(i);
		}
		for (int j = 0; primes[i] * j <= n; ++j)
		{
			phi[primes[j] * i] *= (i - 1) / i;
			vis[primes[j] * i] = 1;
			if (i % primes[j] == 0) break;
		}
	}
}

时间复杂度: O(n)O(n)O(n) 。

2. 求一个数的 φ\varphiφ

若只需要求出一个数的 φ\varphiφ ,也可以使用以下方法:

inline int getPhi(const long long& n)
{
	long long ans = n;
	for (int i = 2; i * i <= n; ++i)
	{
		if (n % i == 0)
		{
			while (n % i == 0) n /= i;
			ans -= ans / i;
		}
	}
	return n > 1 ? ans - ans / n : ans;
}

时间复杂度: O(n⋅log⁡n)O(\sqrt{n} \cdot \log n)O(n​⋅logn) 。

三、逆元

在使用模运算的时候,由于模运算不存在分配率,所以我们不能使用除法去进行取模,即
ab mod p≠a mod pb mod p\frac{a}{b}\text{ mod } p\neq\frac{a \text{ mod } p}{b \text{ mod } p}ba​ mod p=b mod pa mod p​ 。
而逆元的定义是对于 a,b,p∈Za,b,p \in \bold{Z}a,b,p∈Z ,存在一个整数 xxx ,使得 ax≡bx(modp)\displaystyle\frac{a}{x}\equiv bx \pmod pxa​≡bx(modp) 。具体可以使用 Fermat 小定理求出。
Fermat 小定理:对于整数 nnn 和质数 ppp , p∣np−np|n^p-np∣np−n 恒成立。
变形,得 np≡n(modp)n^p\equiv n \pmod pnp≡n(modp) , np−2≡n−1(modp)n^{p-2}\equiv n^{-1} \pmod pnp−2≡n−1(modp) 。因此, np−2n^{p-2}np−2 即为 nnn 的逆元。

inline int getInv(long long x, long long p)
{
	const auto quickPow = [&](long long a, long long b, long long p) 
	{
		long long res = 1;
		for (; b; b >>= 1)
		{
			if (b & 1) res = (res * a) % p;
			a = (a * a) % p;
		}
		return res;
	};
	return quickPow(x, p - 2, p);
}

时间复杂度: O(log⁡p)O(\log{p})O(logp) 。
条件: ppp 必须是质数。

四、组合数

组合数的定义: Cmn\mathrm{C}_m^nCmn​ 表示从 mmm 个物品里面拿出 nnn 个物品进行排列的总方案数。

1. 杨辉三角求组合数

杨辉三角示例如下:
111121133114641… \begin{matrix} &&&& 1 \\ &&& 1 && 1 \\ &&1 && 2 && 1\\ &1 && 3 && 3 && 1\\ 1 && 4 && 6 && 4 && 1 \\ &&& & \dots \end{matrix} 1​1​14​13​126…​13​14​1​1​
其中,第 mmm 行第 nnn 列的数 (n≤m+1)(n \le m+1)(n≤m+1) 即为 Cmn\mathrm{C}_m^nCmn​ 。
状态转移方程: Cmn=Cm−1n+Cm−1n−1\mathrm{C}_m^n=\mathrm{C}_{m-1}^n+\mathrm{C}_{m-1}^{n-1}Cmn​=Cm−1n​+Cm−1n−1​ 。

template<typename _Tp>
inline int getC(_Tp& C)
{
	C[0][0] = 1;
	for (int i = 1; i <= 1000; ++i)
	{
		for (int j = 0; j <= i; ++j)
		{
			C[i][j] = C[i - 1][j] + C[i - 1][j - 1];
		}
	}
}

时间复杂度: O(n2)O(n^2)O(n2)
适用范围:n≤104n \le 10^4n≤104

2. 组合数公式求组合数

组合数公式如下:
Cmn=n!m!(n−m)!\mathrm{C}_m^n=\frac{n!}{m!(n-m)!}Cmn​=m!(n−m)!n!​
又因为 n!,m!,(n−m)!n!,m!,(n-m)!n!,m!,(n−m)! 可以通过分解质因数和快速幂计算,所以比杨辉三角更加高效。

#include <bits/stdc++.h>

using namespace std;

const int MOD = 1e9 + 7;

int main()
{
    ios::sync_with_stdio(0);
    int N;
    cin >> N;

    const auto quickPow = [&](long long a, long long b, long long p) -> long long
    {
        long long res = 1;
        for (; b; b >>= 1)
        {
            if (b & 1) res = (res * a) % p;
            a = (a * a) % p;
        }
        return res;
    };
    vector<long long> fact(1e5 + 1);
    vector<long long> inv(1e5 + 1);
    fact[0] = inv[0] = 1;
    for (int i = 1; i <= 1e5; ++i)
    {
        fact[i] = fact[i - 1] * i % MOD;
        inv[i] = inv[i - 1] * quickPow(i, MOD - 2, MOD) % MOD;
    }

    while (N--)
    {
        long long a, b;
        cin >> a >> b;
        cout << ((fact[a] * inv[b]) % MOD * inv[a - b]) % MOD << endl;
    }

    return 0;
}

时间复杂度: O(nlog⁡n)O(n\log n)O(nlogn) 。适用于 n≤105n \le 10^5n≤105 的题目。

3. 使用 Lucas\texttt{Lucas}Lucas 定理求组合数

Lucas\texttt{Lucas}Lucas 定理描述如下:
Cmn≡Cn/pm/p⋅Cm mod pn mod p(modp)\mathrm{C}_m^n\equiv \mathrm{C}^{m/p}_{n/p}\cdot \mathrm{C}_{m \text{ mod } p}^{n \text{ mod } p} \pmod pCmn​≡Cn/pm/p​⋅Cm mod pn mod p​(modp)
使用逆元和快速幂可以高效求出 Cmn\text{C}_m^nCmn​ 。

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int N;
    cin >> N;

    const auto quickPow = [&](long long a, long long b, long long p) -> long long
    {
        long long res = 1;
        for (; b; b >>= 1)
        {
            if (b & 1) res = (res * a) % p;
            a = (a * a) % p;
        }
        return res;
    };
    const auto C = [&](long long n, long long m, long long p) -> long long
    {
        if (n < m) return 0;
        if (m == 0) return 1;
        m = (m > n - m ? n - m : m);
        long long up = 1, down = 1;
        for (int i = 1; i <= m; ++i)
            down = (down * i) % p;
        for (int i = n - m + 1; i <= n; ++i)
            up = (up * i) % p;
        return up * quickPow(down, p - 2, p) % p;
    };
    function<long long(long long, long long, long long)> Lucas = [&](long long n, long long m, long long p) -> long long
    {
        if (m == 0) return 1;
        return Lucas(n / p, m / p, p) * C(n % p, m % p, p) % p;
    };

    while (N--)
    {
        long long n, m, p;
        cin >> n >> m >> p;
        cout << Lucas(n, m, p) << endl;
    }
    return 0;
}

注:本文中所有代码未经调试,如有错误请在评论区中指出,谢谢。

PaddleOCR多进程GPU推理实战:200万图片高效处理方案 本文详细介绍了PaddleOCR多进程GPU推理在高效处理200万张图片OCR任务中的实战方案。通过优化GPU利用率、多进程并发和关键参数调优,实现了从单进程3000张/小时到8进程3万张/小时的性能飞跃,为大规模OCR处理提供了可靠解决方案。 阅读详情

相关推荐

工程制图习题集张大庆课后习题答案解析

所以,我想向大家求助,希望能得到一些学习资料、学习方法和学习经验,帮助我更好地理解和掌握这门课程。在寻找学习资料的过程中,我发现了一款叫做资小料的APP,它里面有很多关于工程制图的学习资料,包括视频教程、习题解答和考试真题等。通过使用资小料,我逐渐掌握了工程制图的基本理论和方法,解决了很多学习中遇到的问题。在这里,我想推荐给和我一样在学习《工程制图习题集》这门课的同学们,希望大家也能从这款APP中受益,共同进步。上传者: 『Consentesdei』蒼迷穀。出版社: 清华大学出版社。

weixin_58833001的博客 925

CSP-S 模拟 长寿花 (组合数学)(DP)

传送门 NOINOINOI 模拟比 CSPCSPCSP 模拟简单干脆就都说成 CSPCSPCSP 模拟 显然按层转移,并且颜色种类没有关系,只关心个数 fi,jf_{i,j}fi,j​ 表示到第 iii 层,有 jjj 种颜色的方案数 枚举填几种颜色,val(i,j)val(i,j)val(i,j) 表示 iii 个空格 jjj 个颜色的方案数即 j∗(j−1)i−1j*(j-1)^{i-1}j...

FSYo 的博客 298

Code Ocean 上传代码 手把手教程

对于一些学术期刊,录用前会让把代码上传到Code Ocean上,但上传过程可能会遇到一些问题,小编分享一下自己的上传经验。他们会进行验证,验证通过,将自动发布。点此运行即可,但是运行比较慢。

u014071947的博客 1万+

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 206

Polardb训练营-本地部署 PolarDB-X

PolarDB-X是阿里巴巴自主设计研发的高性能云原生分布式数据库产品,为用户提供高吞吐、大存储、低延时、易扩展和超高可用的云时代数据库服务。云原生+MySQL生态PolarDB-X已作为标准云产品在世界范围内的13个地区提供服务。依托云资源和容器化部署能力,PolarDB-X可以在数分钟内完成集群创建和变配,整个过程中用...

yangjunfeng0604的博客 2473

自定义模型训练——打造专属OpenClaw模型(2026AI版)

本文介绍了OpenClaw自定义模型训练的核心流程,包括框架选择(PyTorch、TensorFlow、HuggingFace和原生OpenClaw框架)、训练环境搭建脚本、以及数据收集系统的设计。数据收集器支持从数据库、API、文件和网络等多种来源获取训练数据,并提供灵活的过滤机制确保数据质量。通过这套系统,开发者可以高效准备训练数据,为后续模型训练打下坚实基础。

博客 877

【算法拾光】链表 哈希表|K个一组翻转链表 + 两数之和

K个一组翻转链表需分段反转,借助哑节点与前驱指针维护连接,避免断链;两数之和利用哈希表实现O(1)查找,空间换时间,高效定位目标组合。前者考察链表指针操作,后者聚焦映射关系构建,均为面试高频题。

wuqingyigexiaoba的博客 312

STM32F103C8T6驱动DHT11温湿度传感器程序

本程序基于 STM32F103C8T6 微控制器,通过 GPIO 模拟单总线通信时序实现对 DHT11 温湿度传感器的数据采集,主机采用拉低数据线的方式触发传感器启动,并通过检测高电平持续时间区分逻辑“0”和“1”,依次读取湿度和温度的整数数据及校验位,经过校验后将有效结果存入缓存数组,实现对环境温湿度的周期性测量与处理。

加斯顿工程师的博客 200

排序算法深度笔记(下):非比较类排序的线性突破与工程边界

排序算法时间复杂度额外空间复杂度稳定性是否基于比较选择排序O(N^2)(O(1))不稳定是冒泡排序O(N^2)(O(1))稳定是插入排序O(N^2)(O(1))稳定是归并排序O(N\log N)(O(N))稳定是快速排序O(N\log N)O(log N)不稳定是堆排序O(N\log N)O(1)不稳定是计数排序(O(N + M))O(M))稳定否基数排序O(N)稳定否桶排序平均O(N) / 最坏O(N^2)

2401_87069538的博客 571

详解账务核心,从入门到精通

本文系统阐述了账务体系的设计原理与实现方法,围绕支付交易的基础设施——账务系统展开深入探讨。文章首先从账务实现原理出发,强调从客户场景中抽象能力的重要性,详细解析了账务总架构及其与外围系统的协同关系。随后重点剖析了账户子系统的设计,包括账户生态、主体管理、结构设计等核心要素,并针对热点账户问题提出了多种创新解决方案。此外,文章还深入探讨了会计日切原理、营销类账务处理等专业领域,最后以支付机构场景为例,全面解析了清结算业务的账务实现模型。全文通过理论结合实践的方式,为构建高效、可靠的账务系统提供了系统性的方法

银行信息系统应用架构详解 531

YOLOv11 结合 BiFormer 注意力:打造多场景高精度检测模型实战教程

注册BiFormer模块(若代码未自动注册)# 加载自定义配置的YOLOv11模型。

know_F0727的博客 251

算法日常・每日刷题--<动态规划>42

本题为“不相交的线”,与最长公共子序列问题相似。使用动态规划求解:定义 dp[i][j] 表示 nums1[0:i] 与 nums2[0:j] 的最大不相交连线数。若元素相等,则继承左上值加1;否则取上方或左方最大值。最终返回 dp[m][n],即两数组的最大不相交连线数。时间复杂度 O(mn),空间复杂度 O(mn)。

2503_92261635的博客 20

使用R语言整理GEO数据的简易教程

本教程介绍了使用R语言从GEO数据库下载数据并进行数据整理的基本步骤。根据实际研究问题,你可能需要进行更复杂的数据处理和分析。R语言作为一种强大的生物信息学工具,为GEO数据的整理、分析和可视化提供了丰富的功能和工具。希望这个教程能够帮助你入门GEO数据整理和R语言的应用。如果你在使用过程中遇到问题,或需要进一步的指导,请随时向我询问。祝你在GEO数据分析的旅程中取得成功!

Mrrunsen的博客 3743

C语言程序设计题|有序数组插入数字冒泡排序

题目要求将一个数插入有序数组末尾,并用冒泡排序实现整体升序。代码先将输入数存入数组最后位置,再通过双重循环进行冒泡排序,每轮将较大元素向后移动,最终输出11个升序元素。该方法虽时间复杂度为O(n²),但符合题目要求,逻辑清晰,适合初学者理解排序原理。

2301_81429079的博客 749

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【算法拾光】模拟|外观数列 + 数青蛙

本文总结两道模拟题解法:外观数列通过迭代统计连续数字个数生成下一项,关键在于处理末尾字符;数青蛙则模拟青蛙叫声“croak”状态转移,维护各阶段青蛙数量,记录最大并发数并确保全部完成。共性在于严格遵循流程、细致处理边界与非法情况,锻炼字符串遍历与状态管理能力。

wuqingyigexiaoba的博客 369

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

408 算法 04|主元素与三元组最小距离:两种“扫描时做决定“的思路

2013(41) 的主元素用摩尔投票一遍选出候选,但真正的考点是"选完必须验票";2020(41) 的三元组最小距离,三指针每次只挪最小的那个,靠的是 D=2×(max−min) 这个恒等式。两套完整 C 代码加真实输出,附官方评分档位表。

m0_56226131的博客 406

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

牛客周赛165C题(前后缀性质,递推,排序,枚举)

题目大意:给定长度为 `n` 的数组,选择 `k ∈ [1,n]`,将前 `k` 个元素整体翻转,后面的元素不变。要求操作后的整个数组非递减,统计满足条件的 `k` 的数量。题目链接:https://ac.nowcoder.com/acm/contest/141721/C。时间复杂度:O(nlogn)

2501_94316951的博客 170

【数据结构-3】算法美学之降复杂度

在while循环的循环体内,首先用临时变量保存最后一个位置的数据,再通过for循环把所有元素往后移动一位,最后把tmp中保存的值放到下标为0的位置上去。方法二的思路是:创建新数组,让原数组中后k个数据移动到新数组中前面的位置,让原数组中前numsSize-k个数据移动到新数组中后面的位置,这。这段代码的思路是:三次逆置,第一次逆置前numsSize-k个数据,第二次逆置后k个数据,最后整体逆置。这篇博文分享一道解法不一的算法题,求解过程的目的在于降低算法的时间复杂度,题源力扣。,属于空间换时间的操作。

weixin_44218929的博客 83

算法61,判定是否为字符重排

两字符串能互为重排 ⇔。

sheshibenniaodan的博客 218

算法日常・每日刷题--<动态规划>32

给定严格递增的正整数数组,求最长斐波那契子序列长度。使用二维DP,dp[i][j]表示以arr[i]、arr[j]为最后两项的序列长度,初始化均为2。通过哈希表快速查找前一项target = arr[j] - arr[i],若存在且下标小于i,则状态转移:dp[i][j] = dp[k][i] + 1。遍历更新全局最大长度,最终若结果小于3则返回0。时间复杂度O(n²),空间复杂度O(n²)。

2503_92261635的博客 178

算法札记:几何分布在算法题UVA1262的运用

集卡问题求解核心:将集齐n种优惠券的过程分为n个阶段,每个阶段期望购买次数为 $ \frac{n}{k} $(k为剩余种类数),总期望为 $ n \cdot H_n $(调和数)。通过自洽方程推导单阶段期望,无需几何分布或无穷级数,逻辑清晰且适用于大一水平。例如,n=5时期望约11.42,非5。题目要求以带分数形式输出精确结果,算法上需累加分数并化简。

Keven_11的博客 349

考拉兹猜想 - 7

本文通过引入虚数单位重构Collatz猜想的迭代逻辑,指出偶数减半与奇数“乘3加1”的过程在虚数坐标下等价于归结操作。关键在于:乘3加1使奇数跃升至偶数,随后持续减半,而虚数单位代表“无限减1”,实现无限向有限的转化。无论初始值如何,减半始终主导,最终归结为4-2-1循环。该视角消解了正向思维中的速度竞争疑虑,证明归结是必然结果。

杨铸人的博客 42

SSL证书选RSA还是ECDSA:公钥算法、CA签名与兼容性怎么核对

申请SSL证书时,RSA和ECDSA该怎么选?先分清站点公钥算法、CA签名算法和TLS实际兼容性,再用隔离OpenSSL实验读取两类材料,核对申请、续期和部署交接,避免只看Signature Algorithm就选错。

谁呀!的博客 399

贪心题目:可以到达的最远建筑

为了到达尽可能远的建筑物,在将砖块替换成梯子时,应将高度差最大位置的砖块替换成梯子,此时剩余的砖块数量最多,如果将高度差较小位置的砖块替换成梯子,则剩余的砖块数量较少,能到达的最远建筑物下标不可能更大。开始向后面的建筑物移动,移动过程中维护优先队列存储正高度差,优先队列的队首元素是最大元素,每次遇到正高度差时优先考虑使用砖块,如果砖块数量不够则使用梯子替换最大高度差位置的砖块,直到砖块和梯子都使用完毕时,到达的建筑物即为最远建筑物。如果以最佳方式使用给定的梯子和砖块,返回可以到达的最远建筑物的下标。

stormsunshine的博客 279

从曲线到储层:Techlog/KAPPA 全流程算法、UltraLAB 选型与本地 AI 部署实战

以高频 CPU 保证交互,以充足内存承载多井与多任务,以 NVMe 打通项目和知识库 I/O,再按本地模型、上下文与并发配置 GPU。对 UltraLAB 用户而言,更合理的采购方式是带着真实项目做选型:一组典型井、一套完整解释模板、一个目标大模型、一次多人并发测试。用实测结果确定配置,才能把预算转化为解释效率,而不是闲置算力。软件模块、操作系统与许可条件以厂商当前正式说明为准;硬件建议需结合项目实测。AI 输出只能作为辅助证据,不能替代岩石物理与油藏工程专业审核。

wdf8088的博客 181

【Deep-OC-SORT 01】多轨迹算法Deep-OC-SORT源码分析

本工程基于Deep-OC-SORT核心模块,重构并适配了EmbeddingComputer(外观特征提取)、CMCComputer(相机运动补偿)与OCSort(主跟踪器)三类。前者实现整框/网格模式的特征提取与L2归一化;后者通过稀疏光流或SIFT匹配估计仿射变换,补偿相机运动;主跟踪器融合IoU、外观相似度与方向一致性,支持模块开关与自定义组件,实现高效多目标跟踪。

Jayson 博客 336
上一篇: 矩阵与高斯消元:数学算法在计算机领域的应用
下一篇: 树状数组的原理和简单实现:一种使用倍增优化并支持在线 O(log N) 修改、查询的数据结构
Aobing_peterJr
博客等级 码龄2年 128粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值