【AcWing】算法基础课-数学知识
目录
1、质数
1.1 试除法判定质数
暴力解法
优化解法
1.2 分解质因数(试除法)
暴力解法
优化解法
1.3 筛质数
朴素筛法(nlogn)
埃氏筛法(nloglogn)
线性筛法(n)
2、约数
2.1 试除法求约数
2.2 约数个数
2.3 约数之和
2.4 最大公约数
实现方法一
实现方法二
3、欧拉函数
3.1 欧拉函数
3.2 筛法求欧拉函数
3.3 欧拉定理、费马定理
4、快速幂
4.1 快速幂
编辑
4.2 快速幂求逆元
1、质数
质数就是在大于1的自然数中,只包含1和本身两个约数的数,也称为素数
合数就是在大于1的自然数中,除了1和本身两个约数,还至少有一个约数的数
1.1 试除法判定质数
866. 试除法判定质数 - AcWing题库
暴力解法
若要判定n是否是质数,暴力解法就是枚举2到n-1之间所有的数,看n能否整除这些数
#include<iostream>
using namespace std;bool is_prime(int n)
{if(n < 2) return false;for(int i = 2;i < n;i ++)if(n % i == 0) return false;return true;
}int main()
{int n; cin >> n;while(n --){int a; cin >> a;if(is_prime(a)) cout << "Yes" << endl;else cout << "No" << endl;}return 0;
}
此时是会超时的。is_prime的时间复杂度是O(n)。
优化解法
我们可以对上面的is_prime进行优化。我们会发现,若d能够整除n,则n/d也能够整除n。例如当n=12时,3能够整除12,同样12/3=4也能够整除12。也就是说,约数是成对出现的。所以,我们可以利用这个性质,枚举时只枚举较小的哪一个约数即可。两个约数一个是d,另一个是n/d,假设d较小d <= n/d,计算出来d <= sqrt(n),所以这种算法的时间复杂度是O(sqrt(n))
#include<iostream>
using namespace std;bool is_prime(int n)
{if(n < 2) return false;for(int i = 2;i <= n / i;i ++)if(n % i == 0) return false;return true;
}int main()
{int n; cin >> n;while(n --){int a; cin >> a;if(is_prime(a)) cout << "Yes" << endl;else cout << "No" << endl;}return 0;
}
注意:上面的i <= n / i表示的是只枚举较小的哪一个约数(i <= sqrt(n)),此时可能会有下面另外两种写法
(1) i <= sqrt(n),是不推荐的,因为sqrt函数较慢
(2) i * i <= n,同样不推荐,可能会造成溢出
1.2 分解质因数(试除法)
867. 分解质因数 - AcWing题库
暴力解法
若要分解n的质因数,暴力解法就是就是枚举2到n的所有数,若这其中的某一个数能够整除n,说明这个数就是n的一个质因数
#include<iostream>
using namespace std;void divide(int n)
{for(int i = 2;i <= n;i ++){if(n % i == 0){int s = 0;while(n % i == 0){n /= i;s ++;}cout << i << " " << s << endl;}}cout << endl;
}int main()
{int n; cin >> n;while(n --){int a; cin >> a;divide(a);}return 0;
}
此时可能会有一个疑问,就是我们要的是质因数,不需要先判断以下i是否是质数吗?是不需要的,因为当枚举到i时,已经将2-i-1之间所有的质因子除干净了,所以当n%i==0成立,则i一定是质数。例如100,4是其约数,但4是一个合数,当i枚举到4时,一定会先遇到4的约数,即2,所以i到4时,4已经不是25的约数了
上面的代码时会超时的,当n是质数时,达到最坏时间复杂度O(n)
优化解法
我们会发现,n的质因子中,最多只能有一个是大于sqrt(n)的,所以我们可以先将<=sqrt(n)的所有质因子先找出来,若最后n>1,则n就是那个大于sqrt(n)的质因子,这样的时间复杂度是O(sqrt(n))
#include<iostream>
using namespace std;void divide(int n)
{for(int i = 2;i <= n / i;i ++){if(n % i == 0){int s = 0;while(n % i == 0){n /= i;s ++;}cout << i << " " << s << endl;}}if(n > 1) cout << n << " " << 1 << endl;cout << endl;
}int main()
{int n; cin >> n;while(n --){int a; cin >> a;divide(a);}return 0;
}
在这两道题中,质数判定的时间复杂度一定是O(sqrt(n))的,但分解质因数不一定,当n = 2^k时,达到最好时间复杂度O(logn),所以时间复杂度是在O(logn)~O(sqrt(n))的
1.3 筛质数
868. 筛质数 - AcWing题库
朴素筛法(nlogn)
对于n,朴素筛法是从前向后遍历2到n之间的所有数,每次遍历到一个数时,就将其在n范围内的倍数都删除,若第一次遍历到这个数是没有被删除的,说明这个数就是质数。假设p没有被删除,说明p不是2到p-1之间如何一个数的倍数,即p是质数
#include<iostream>
using namespace std;const int N = 1e6 + 10;int cnt;
bool st[N];void get_primes(int n)
{for(int i = 2;i <= n;i ++){if(!st[i]) cnt ++; // 第一次遍历到这个数没有被删除,则这个数就是质数for(int j = i + i;j <= n;j += i) st[j] = true; // 删除倍数}
}int main()
{int n; cin >> n;get_primes(n);cout << cnt << endl;return 0;
}
这个筛法的时间复杂度是O(nlogn)的,在get_primes中,当i等于2时,向后删除倍数是循环n/2次,当i等于3时,向后删除倍数是循环n/3次,...,当i等于n时,向后删除倍数是循环n/n次。所以get_primes总的循环次数就是(n/2 + n/3 + ... + n/n),大约是等于O(nlogn)的
埃氏筛法(nloglogn)
在上面的get_primes中,不管i是否是质数,我们都删除它的倍数,实际上只有当i是质数时,我们才需要删除。因为遍历到合数时,这个合数一定有比本身更小的质因子,此时这个合数已经被删掉了,并且这个合数的所有倍数也一定含有这个质因子,所以合数的所有倍数都已经被删掉了,再去删除其倍数是没有意义的。
#include<iostream>
using namespace std;const int N = 1e6 + 10;int cnt;
bool st[N];void get_primes(int n)
{for(int i = 2;i <= n;i ++){if(!st[i]) {cnt ++; // 第一次遍历到这个数没有被删除,则这个数就是质数for(int j = i + i;j <= n;j += i) st[j] = true; // 删除倍数}}
}int main()
{int n; cin >> n;get_primes(n);cout << cnt << endl;return 0;
}
这个算法实际上就是每个合数使用它的质因子筛掉。时间复杂度是O(nloglogn)
埃氏筛法,对于每一个合数,它的每一个质因子都会将这个合数删除一遍,所以时间复杂度无法达到O(n),若每个合数只会被其中一个质因子删除,那么就达到了O(n)
线性筛法(n)
线性筛法是每一个合数,只会由这个合数的最小质因子删除,所以每一个合数只会被删除一次,时间复杂度就是O(n)。线性筛法是筛的时候,从小到大遍历当前得到的所有质数,每次将当前质数与i的乘积删掉。每次删掉一个数时,是用其最小质因子删掉的。primes数组是存放已筛出的质数的
primes[j] * i一定是合数。当if (i % primes[j] == 0)这个条件是为了保证每一个合数只会被它的最小质因子删除。
(1)当i%primes[j] != 0时,primes[j]一定小于i的所有质因子,primes[j]也一定是primes[j]*i的最小质因子
(2)当i%primes[j] == 0时,primes[j]一定等于i的最小质因子,primes[j]也一定是primes[j]*i的最小质因子
例如i = 9,primes[j] = 3,此时会删除27,但不能再向后删除了,因为下一个primes[j] = 5,若将45删除,45的最小质因子不是5,是3,此时若删除了,等到i = 15,primes[j] = 3时还会再删除一次,就无法保证每一个合数只会被它的最小质因子删除。
#include<iostream>
using namespace std;const int N = 1e6 + 10;int primes[N], cnt;
bool st[N];void get_primes(int n)
{for (int i = 2; i <= n; i ++ ){if (!st[i]) primes[cnt ++ ] = i;for (int j = 0; primes[j] <= n / i; j ++ ){st[primes[j] * i] = true;if (i % primes[j] == 0) break;}}
}int main()
{int n; cin >> n;get_primes(n);cout << cnt << endl;return 0;
}
2、约数
约数是指能够整除一个整数的所有整数。换句话说,如果整数 a 除以整数 b 后得到的商是一个整数,并且没有余数,那么 b 就是 a 的约数。例如6的约数有1,2,3,6
2.1 试除法求约数
869. 试除法求约数 - AcWing题库
在前面已经提到过约数是成对出现的,对于n,若d是它的约数,那么n/d也是它的约数。所以我们求约数只枚举小的一半即可,然后通过n/d获取另一个约数
#include <iostream>
#include <algorithm>
#include <vector>using namespace std;vector<int> get_divisors(int x)
{vector<int> res;for (int i = 1; i <= x / i; i ++ )if (x % i == 0){res.push_back(i);if (i != x / i) res.push_back(x / i); // 一定要有这一步,因为当i == x / i时只需要加入一个即可}sort(res.begin(), res.end());return res;
}int main()
{int n;cin >> n;while (n -- ){int x;cin >> x;auto res = get_divisors(x);for (auto x : res) cout << x << ' ';cout << endl;}return 0;
}
2.2 约数个数
870. 约数个数 - AcWing题库
对于任何一个数,都可以分解成由质因子相乘的结果。假设n的所有质因数为n1,n2,...,nk
n的约数个数 = (a1 + 1)(a2 + 1)...(ak + 1)
例如n = 360,质因子为2,3,5,360 = 2^3 + 3^2 + 5^1,所以对于2^x + 3^y + 5^z,在这其中x取0到3,y取0到2,z取0到1都是n的约数,所以约数个数 = 4 * 3 * 2 = 24
所以在求一个数的约数个数之前,需要先将这个数进行质因数分解。在这道题中我们要求的是a1 * a2 * ... * an的约数个数,我们可以分别求出每一个数的约数个数,然后再相加。
#include <iostream>
#include <algorithm>
#include <unordered_map>
#include <vector>using namespace std;typedef long long LL;const int N = 110, mod = 1e9 + 7;int main()
{int n;cin >> n;// 使用哈希表存储每一个质因数的次方unordered_map<int, int> primes;while (n -- ){int x;cin >> x;// 对每一个数都进行质因数分解for (int i = 2; i <= x / i; i ++ )while (x % i == 0){x /= i;primes[i] ++ ;}if (x > 1) primes[x] ++ ;}// 将每一个质因数的次方+1再相乘LL res = 1;for (auto p : primes) res = res * (p.second + 1) % mod;cout << res << endl;return 0;
}
2.3 约数之和
871. 约数之和 - AcWing题库
在上面我们已经将一个数n分解成了质因数相乘的形式
约数之和等于
#include <iostream>
#include <algorithm>
#include <unordered_map>
#include <vector>using namespace std;typedef long long LL;const int N = 110, mod = 1e9 + 7;int main()
{int n;cin >> n;unordered_map<int, int> primes;// 对所有的数进行质因数分解while (n -- ){int x;cin >> x;for (int i = 2; i <= x / i; i ++ )while (x % i == 0){x /= i;primes[i] ++ ;}if (x > 1) primes[x] ++ ;}LL res = 1;for (auto p : primes){// 对于每一个质因数求和LL a = p.first, b = p.second;LL t = 1;while (b -- ) t = (t * a + 1) % mod;res = res * t % mod;}cout << res << endl;return 0;
}
2.4 最大公约数
872. 最大公约数 - AcWing题库
使用欧几里得算法,也称为辗转相除法
实现方法一
我们可以将上一次的除数作为下一次的被除数,上一次的余数作为下一次的除数,直到余数为0,此时的除数就是最大公约数
#include<iostream>
using namespace std;int Fac(int a, int b)
{int c = 1; // c用来保存余数while (c){c = a % b;a = b; // a是被除数b = c; // b是除数}return a;
}int main()
{int n; cin >> n;while(n --){int a, b; cin >> a >> b;cout << Fac(a, b) << endl;}return 0;
}
实现方法二
#include <iostream>
#include <algorithm>using namespace std;int gcd(int a, int b)
{return b ? gcd(b, a % b) : a;
}int main()
{ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int n; cin >> n;while (n -- ){int a, b; cin >> a >> b;cout << gcd(a, b) << endl;}return 0;
}
3、欧拉函数
3.1 欧拉函数
873. 欧拉函数 - AcWing题库
#include <iostream>using namespace std;int phi(int x)
{int res = x;for (int i = 2; i <= x / i; i ++ )if (x % i == 0) // 如果i是x的质因数{res = res - res / i;while (x % i == 0) x /= i; // 将i除干净}if (x > 1) res = res / x * (x - 1); // 可能会有一个大于sqrt(n)的质因数return res;
}int main()
{int n;cin >> n;while (n -- ){int x;cin >> x;cout << phi(x) << endl;}return 0;
}
这里为了能够整除,不能res = res * (1 - 1 / i),而需要res = res - res * i
时间复杂度是O(n * sqrt(a)),并且这个时间复杂度是一定这样的
3.2 筛法求欧拉函数
874. 筛法求欧拉函数 - AcWing题库
这道题是要求1-n所有数的欧拉函数之和,若使用上面从定义出发的做法,时间复杂度是
O(n * sqrt(n)),对于这一道题的数据是会超时的。此时可以使用前面线性筛法求质数的方法,在线性筛法的过程中,顺便求出欧拉函数。时间复杂度是O(n)
#include <iostream>using namespace std;typedef long long LL;const int N = 1000010;int primes[N], cnt;
int euler[N]; // 存放每一个数的欧拉函数
bool st[N];void get_eulers(int n)
{euler[1] = 1;for (int i = 2; i <= n; i ++ ){if (!st[i]){primes[cnt ++ ] = i;euler[i] = i - 1;}for (int j = 0; primes[j] <= n / i; j ++ ){int t = primes[j] * i;st[t] = true;if (i % primes[j] == 0){euler[t] = euler[i] * primes[j];break;}euler[t] = euler[i] * (primes[j] - 1);}}
}int main()
{ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int n; cin >> n;get_eulers(n);LL res = 0;for (int i = 1; i <= n; i ++ ) res += euler[i];cout << res << endl;return 0;
}
欧拉函数之和可能会超过int,所以要开long long
3.3 欧拉定理、费马定理
4、快速幂
4.1 快速幂
875. 快速幂 - AcWing题库
#include <iostream>
#include <algorithm>using namespace std;typedef long long LL;LL qmi(int a, int b, int p)
{LL res = 1 % p;while (b){if (b & 1) res = res * a % p; // 这一步成立说明末位是1a = a * (LL)a % p;b >>= 1;}return res;
}int main()
{ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int n; cin >> n;while (n -- ){int a, b, p; cin >> a >> b >> p;cout << qmi(a, b, p) << endl;}return 0;
}
两个10^9相乘,所以要开long long
4.2 快速幂求逆元
876. 快速幂求逆元 - AcWing题库
#include <iostream>
#include <algorithm>using namespace std;typedef long long LL;LL qmi(int a, int b, int p)
{LL res = 1;while (b){if (b & 1) res = res * a % p;a = a * (LL)a % p;b >>= 1;}return res;
}int main()
{ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int n; cin >> n;while (n -- ){int a, p; cin >> a >> p;if (a % p == 0) cout << "impossible" << endl;else cout << qmi(a, p - 2, p) << endl;}return 0;
}
相关文章:
【AcWing】算法基础课-数学知识
目录 1、质数 1.1 试除法判定质数 暴力解法 优化解法 1.2 分解质因数(试除法) 暴力解法 优化解法 1.3 筛质数 朴素筛法(nlogn) 埃氏筛法(nloglogn) 线性筛法(n) 2、约数 2.1 试除法求约数 2.2 约数个数 2.3 约数之和 2.4 最大公约数 实现方法一 实现方法二 …...
JVM常见概念之条件移动
问题 当我们有分支频率数据时,有什么有趣的技巧可以做吗?什么是条件移动? 基础知识 如果您需要在来自一个分支的两个结果之间进行选择,那么您可以在 ISA 级别做两件不同的事情。 首先,你可以创建一个分支ÿ…...
k8s存储介绍(二)Secret
Kubernetes(K8s)提供了一种安全的方式来存储和管理敏感信息,如密码、OAuth 令牌和 SSH 密钥,这就是 Secret。使用 Secret 可以避免将敏感数据硬编码到 Pod 规范或容器镜像中,从而提高安全性和可管理性。 1. Secret 的…...
Css布局-常规流笔记
https://developer.mozilla.org/zh-CN/docs/Learn/CSS/CSS_layout/Normal_Floworghttps://developer.mozilla.org/zh-CN/docs/Learn/CSS/CSS_layout/Normal_Flow 前言 常规流布局是html元素默认布局,凡是没有设置过css布局的html元素,默认布局方式称为常…...
Linux系统管理与编程08:任务驱动综合应用
兰生幽谷,不为莫服而不芳; 君子行义,不为莫知而止休。 [环境] windows11、centos7.9.2207、zabbix6、MobaXterm、Internet环境 [要求] zabbix6.0安装环境:Lamp(linux httpd mysql8.0 php) [步骤] 3 …...
基于 OCO - 2 氧气 A 带辐射数据与地面台站气压观测数据构建近地面气压监测算法方案
基于 OCO - 2 氧气 A 带辐射数据与地面台站气压观测数据构建近地面气压监测算法方案 一、数据获取与准备 (一)OCO - 2 氧气 A 带辐射数据 数据下载:从 OCO - 2 官方数据发布平台(如 NASA 的相关数据存储库),按照研究所需的时间范围(例如,近 5 年的数据以获取足够的样本…...
Linux centos7 虚拟用户访问脚本
下面是脚本: #!/bin/bash #function:创建 vsftpd 虚拟用户脚本 #author: 20250324 IT小旋风# 判断是否是 root 用户 if [ "$USER" ! "root" ]; thenecho "不是 root 用户,无法进行安装操作"exit 1 fi# 关闭防火墙 system…...
HTTP 协议中请求与响应的详细解析
前言:HTTP(Hypertext Transfer Protocol,超文本传输协议)是用于在互联网上传输超文本的协议 --由一个请求和响应组成,一个完整的 HTTP 请求由请求行(Request Line)、请求头(Headers&…...
Collectors.toMap / list 转 map
前言 略 Collectors.toMap List<User> userList ...; Map<Long, User> userMap userList.stream().collect(Collectors.toMap(User::getUserId, Function.identity()));假如id存在重复值,则会报错Duplicate key xxx, 解决方案 两个重复id中&#…...
根据模板将 Excel 明细数据生成 PDF 文档 | PDF实现邮件合并功能
在日常办公中,我们常常会面临这样的需求:依据特定的模板,把 Excel 里的每一条数据转化为单独的 PDF 文档,且这些 PDF 文档中的部分内容会根据 Excel 数据动态变化。这一功能不仅能高效完成任务,还支持图片的动态替换&a…...
<KeepAlive>和<keep-alive>有什么区别
在不同的前端技术框架里,<KeepAlive> 和 <keep-alive> 有着不同的含义与使用场景,下面分别从 Vue 2 和 Vue 3 来为你详细介绍它们的区别。 Vue 2 中的 <keep-alive> 在 Vue 2 里,<keep-alive> 属于内置组件&#x…...
vscode正则表达式使用
小标题 ^\d.\d.\d\s.*$ ^表示匹配字符串的开头。\d\.\d\.\d表示匹配一到多个数字,接着一个小数点,再接着一到多个数字,然后又一个小数点和一到多个数字,用来匹配类似 “2.1.1” 这样的标题号部分。\s表示匹配一个空格。.*表示匹配…...
【LeetCode 题解】算法:4.寻找两个正序数组的中位数
1. 引言:挑战 LeetCode 经典算法题 在算法这片广袤无垠的天地里,一道道经典题目宛如夜空中熠熠生辉的星辰,持续吸引着开发者们投身其中,不断探索。今天,我们继续将目光聚焦于 LeetCode 平台上一道极具代表性的题目&am…...
2025.03.23【前沿工具】| CellPhoneDB:基因网络分析与可视化的利器
文章目录 1. CellPhoneDB工具简介2. CellPhoneDB的安装方法3. CellPhoneDB常用命令 1. CellPhoneDB工具简介 在单细胞生物学的迅猛发展中,理解细胞间的通讯机制对于揭示组织功能和疾病状态至关重要。CellPhoneDB工具,作为一个专门设计用来分析单细胞转录…...
Excel(进阶篇):powerquery详解、PowerQuery的各种用法,逆透视表格、双行表头如何制作透视表、不规则数据如何制作数据透视表
目录 PowerQuery工具基础修改现有数据理规则PowerQuery抓取数据的两种方式多文件合并透视不同表结构多表追加数据透视追加与合并整理横向表格:逆透视 数据用拆分工具整理数据算账龄 不等步长值组合合并文件夹中所有文件PowerQuery处理CSV文件双行表头、带合并单元格如何做数据…...
【WebGIS教程2】Web服务与地理空间服务解析
前言: 在万物互联的时代,Web服务作为跨平台协作的基石,正推动地理信息领域向开放共享迈进。地理空间Web服务通过标准化协议(如WMS、WFS)与松耦合架构,打破传统GIS的封闭性,实现数据与功能的无缝…...
[250325] Claude AI 现已支持网络搜索功能!| ReactOS 0.4.15 发布!
目录 Claude AI 现已支持网络搜索功能!ReactOS 0.4.15 发布! Claude AI 现已支持网络搜索功能! 近日,Anthropic 公司宣布,其 AI 助手 Claude 现在可以进行网络搜索,为用户提供更及时、更相关的回复。这项新…...
gitee第三方登录获取openid | python+Django |已跑通
注:此项目根据美多改编,qq第三方需要备案gitee不用 一、获取appid和appsecret 点击右侧账号设置 左侧菜单栏数据管理里有第三方应用 点击创建应用,根据你的具体情况设置 二、以下是事例代码,根据需要修改即可 setting.py #QQ登…...
Enovia许可分析的自动化解决方案
随着企业产品生命周期管理(PLM)需求的不断演变,Enovia许可分析已成为确保资源优化和合规性的关键环节。然而,传统的手动许可分析方法往往效率低下、易出错,并且难以应对大规模数据。为了解决这一挑战,Enovi…...
【模拟面试】计算机考研复试集训(第十四天)
文章目录 前言一、专业面试1、进程调度中的轮转调度(Round Robin)如何实现?时间片大小对系统性能有何影响?2、动态规划的核心思想是什么?举一例说明其与分治法的区别。3、事务的ACID特性中,“隔离性” 如何…...
ambiq apollo3 ADC实例程序注释
#include "am_mcu_apollo.h" // Apollo MCU 外设寄存器定义和HAL库 #include "am_bsp.h" // 板级支持包(引脚定义、LED函数等) #include "am_util.h" // 通用工具函数(如printf重…...
ECharts实现数据可视化
ECharts实现数据可视化 一、Echarts的简介二、Echarts使用教程1.下载echarts.min.js文件2.编写echarts代码(1)创建渲染实列(2)修改option达到预期的效果(3)创建配置项到实例中 三、Echarts的基础配置四、前…...
Json冲突崩溃问题
在一个项目中同时使用RapidJSON库后崩溃了。。。。 --- ### **一、潜在问题分析** 1. **符号重复定义(ODR冲突)** - **原因**:若您的库和上位机主程序均静态链接了RapidJSON(如编译为.a或.lib),或通…...
HeyGem.ai 全离线数字人生成引擎加入 GitCode:开启本地化 AIGC 创作新时代
在人工智能技术飞速演进的时代,数据隐私与创作自由正成为全球开发者关注的焦点。硅基智能旗下开源项目 HeyGem.ai 近日正式加入 GitCode,以全球首个全离线数字人生成引擎的颠覆性技术,重新定义人工智能生成内容(AIGC)的…...
Go常见问题与答案笔记
这是一篇值的收藏的go常见问题与答案的笔记,内容包括了go的高级,如:悲观锁与乐观锁区别,for range赋值、waitgroup底层原理、go同步原语、defer关键字讲解。 文章目录 1.悲观锁VS乐观锁的区别2.for range中赋值的变量,…...
Redis 服务搭建
💢欢迎来到张翊尘的开源技术站 💥开源如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥 文章目录 Redis 服务搭建源代码编译安装获取源码安装依赖Ub…...
React-Router路由跳转、传参、抽象封装以及嵌套路由
React-Router 示例React-Router抽象路由模块步骤: 路由导航声明式导航编程式导航 路由导航传参searchParams传参params传参 嵌套路由配置默认二级路由404路由配置两种路由模式如何选择 示例 这里我创建两个页面,分别是主页和登录页分别使用编程式导航和…...
PhotoShop学习02
1.添加文本 这个工具栏是文字工具栏,快捷键是T。选择之后鼠标会变成一个竖杠外貌,我们可以借此在图片中写入文字。 选择后,上方的工具栏会变为专门调整文字工具 这个框点击旁边的小箭头可以选择我们我们电脑系统自带的字体,同时可…...
Isaac Sim与Isaac Lab初使用
目录 基于Omiverse下载Isaacsim安装Isaac Lab配置isaacsim环境测试克隆仓库配置python环境强化学习训练的测试 IsaacLab模板配置vscode环境ros接口安装 作为nvidia出品的仿真软件,很多机器人、机器狗【具身智能】都可以有很不错的效果,所以会使用isaac s…...
用户模块——自定义业务异常
用户信息查询接口 在开发用户系统时,一个最基本的需求就是获取用户的个人信息,比如昵称、头像、改名卡次数等。本部分将介绍如何实现一个用户信息查询接口,并结合项目中的用户背包表,查询用户是否有可用的改名卡。 1. 用户信息查…...
基于数据挖掘从经验方和医案探析岭南名医治疗妇科疾病的诊疗和用药规律
标题:基于数据挖掘从经验方和医案探析岭南名医治疗妇科疾病的诊疗和用药规律 内容:1.摘要 背景:岭南地区独特的地理环境、气候条件及人文风俗使该地区妇科疾病具有一定特点,岭南名医在长期临床实践中积累了丰富的治疗经验。目的:基于数据挖掘…...
从零到一开发一款 DeepSeek 聊天机器人
AI聊天机器人 目标设计方案系统架构技术选型功能模块 实现代码环境配置安装依赖 核心代码API 请求函数主循环函数 功能扩展1. 情感分析2. 多语言支持3. 上下文记忆4. 用户身份识别 总结附录 目标 开发一个智能聊天机器人,旨在为用户提供自然、流畅的对话体验。通过…...
开源CDN产品-GoEdge
一、背景 上篇文章分析了一下CDN的基本原理以及使用代码实现了一个乞丐版的智能DNS调度器。从整个例子我们可以清晰了解到CDN原理,也就那么回事。 但是,之前也讲过了,CDN产品融合的技术比较杂、也比较多。所以我就想着,万物皆有开…...
Resume全栈项目(一)(.NET)
文章目录 项目地址一、数据库创建/日志安装1.1 创建实体层1. Entities2. Enums 存放枚举 1.2 创建数据库层1. 安装Persistance层需要的库2. 创建ResumeDbContext3. 添加数据库配置/注册DBContext4. 执行Add-Migration5. 修改字段类型6. Enum支持Json 1.3 安装Serilog1. Api层安…...
如何快速下载并安装 Postman?
从下载、安装、启动 Postman 这三个方面为大家详细讲解下载安装 Postman 每一步操作,帮助初学者快速上手。 Postman 下载及安装教程(2025最新)...
【PICO】开发环境配置准备
Unity编辑器配置 安装Unity编辑器 安装UnityHub 安装Unity2021.3.34f1c1 添加安卓平台模块 Pico软件资源准备 资源准备地址:Pico Developer PICO SDK PICO Unity Integration SDK PICO Unity Integration SDK 为 PICO 基于 Unity 引擎研发的软件开发工具…...
Unity图形学Shader快速回顾
参考知识点来源于: 人间自有韬哥在, 唐老狮,窗外听轩雨 , 呆呆敲代码的小Y little_fat_sheep, AitTech, DeepSeek, 百度, 豆包 目录 一、渲染管线1.应用阶段2.几何阶段3.光栅化阶段 二、矩阵的几何意义1. 平移2. 旋转3. 缩放4.复合运算 三、…...
十六进制(Hexadecimal)简介
十六进制(Hexadecimal)简介 1.1 什么是十六进制? 十六进制是一种使用16个符号表示数值的系统:数字0-9(表示0-9),字母A-F(表示10-15)。 1.2 十六进制表示法 在编程中&a…...
1、pytest基本用法
目录 先给大家分享下学习资源 1. 安装pytest 2. 编写用例规则 3. 执行用例 最近在学习pytest的用法 并且用这套框架替换了原来的unittest, 同是测试框架 确实感觉到pytest更加便捷 这边分享给大家我得学习心得 先给大家分享下学习资源 1 官方文档 pytest 官方…...
2024年3月全国计算机等级考试真题(二级C语言)
😀 第1题 下列叙述中正确的是 A. 矩阵是非线性结构 B. 数组是长度固定的线性表 C. 对线性表只能作插入与删除运算 D. 线性表中各元素的数据类型可以不同 题目解析: A. 矩阵是非线性结构 错误。矩阵通常是二维数组,属…...
GitHub高级筛选小白使用手册
GitHub高级筛选小白使用手册 GitHub 提供了强大的搜索功能,允许用户通过高级筛选器来精确查找仓库、Issues、Pull Requests、代码等。下面是一些常用的高级筛选用法,帮助你更高效地使用 GitHub 搜索功能。 目录 搜索仓库搜索Issues搜索Pull Requests搜…...
如何用腾讯云建站做好一个多语言的建筑工程网站?海外用户访问量提升3倍!分享我的经验
作为新疆地区领先的工程建筑企业,我们深知在数字化浪潮中,一个专业、高效且具备国际视野的官方网站是企业形象与业务拓展的“门面担当”。然而,传统的建站流程复杂、技术门槛高、多语言适配难等问题,曾让我们在数字化转型中举步维…...
SpringBoot-配置文件中敏感信息的加密保姆级教程
前言 公司安全部门检查,要求系统配置文件中的敏感信息如数据库密码等,进行加密处理,否则将受到公司的安全处罚,无奈只要按照公司要求,对springboot项目配置文件的敏感信息进行加密和解密处理。详细教程如下。 快速上…...
数据结构——串
串是一种数据元素为字符的特殊的线性表。 1. 串的定义 零个或多个字符(字母、数字或其他字符)组成的有限序列。记为 S"a1a2...an"S"a1a2...an",长度为 nn,空串长度为0。 2.串的术语 串长度…...
使用python爬取网络资源
整体思路 网络资源爬取通常分为以下几个步骤: 发送 HTTP 请求:使用requests库向目标网站发送请求,获取网页的 HTML 内容。解析 HTML 内容:使用BeautifulSoup库解析 HTML 内容,从中提取所需的数据。处理数据ÿ…...
【MySQL | 七、存储引擎是什么?】
存储引擎是什么?作用于哪里? 1. 存储引擎的定义 存储引擎(Storage Engine)是数据库管理系统中负责 数据的存储、检索和管理 的核心组件。它决定了数据如何存储在磁盘上,以及如何从磁盘中读取数据。存储引擎是数据库与…...
Linux -- 进程间通信(IPC)-- 进程间通信、管道、system V 共享内存、system V 消息队列、责任链模式 、system V 信号量
一、什么是进程间通信 1.进程间通信的目的 数据传输:一个进程需要将它的数据发送给另一个进程。资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发…...
远程登录服务(ssh)
一、远程登录服务概述 1. 概念 远程登录服务就像是一个神奇的桥梁,它让你能够跨越物理距离,通过网络连接到另一台计算机上进行操作。无论你身在何处,只要有网络连接,你就可以像坐在目标计算机前一样进行各种操作。 2. 功能 分享…...
【从零实现Json-Rpc框架】- 项目设计篇
📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...
EtherCAT转CANopen配置CANopen侧的PDO映射
EtherCAT转CANopen配置CANopen侧的PDO映射 在工业自动化领域,EtherCAT和CANopen是两种广泛应用的通信协议。它们各自具有独特的优势,但在某些应用场景下,需要将这两种协议进行转换以实现设备间的高效数据交换。本文将详细介绍如何在使用Ethe…...