數論基礎知識和模板

質數篩

用于快速處理 1~n 中所有素數的算法

因為依次遍歷判斷每一個數是否質數太慢,所以把一些明顯不能質數的篩出來

普通篩法,對于每個整數,刪除掉其倍數。

bool vis[N];//0表示是質數
int pri[N],o; //質數表
void get(int n) {vis[1] = true; //1不是素數for(int i = 2; i <= n; ++i) {//從2開始if(!vis[i])pri[++o] = i; //加入質數表for(int j = 2 * i; j <= n; j += i)vis[j] = 1;//刪除到n的整數倍}
}

線性篩和埃氏篩-CSDN博客

埃氏篩

在普通篩法的過程中,發現篩 4 的倍數毫無意義,因為 4 的倍數肯定已被 2 的倍數篩過了,所以優化方法是只用質數去篩。

?對于每一個整數,只有他是質數時才去篩

if(!vis[i]){
? ? ? ? ? ? primes[ ++ tot] = i;?
? ? ? ? ? ? for(int j = 2 * i; j <= n; j += i)
? ? ? ? ? ? ? ? vis[j] = 1;//進入if里了

? ? ? ? }

線性篩(歐拉

讓每個數都被其最小的質因數篩掉,故一個數只被篩一次,復雜度為O(n)

實現就是,對于每個數,我們都將他對整個現在已有的質數表篩一遍,比如3是質數,那么把已有的2相乘,篩掉6,但是并不往下進行,因為比如12,最小質數因數是3,在遍歷到4時自然而然就篩掉了,這樣每個數就只會被他最小質因數篩掉一次,達到了線性

for(int i = 2; i <= n; ++i) {if(!vis[i]) //是素數pri[ ++ o] = i;for(int j=1;j<o;j++)if(i*pri[j]<=n)vis[i*pri[j]]=1;else break;//}
}

快速冪:

1. 基本概念

一個在O(logn)的時間內計算an的魔術技巧小技巧,而暴力的計算需要O(n)的時間,基本思想就是將指數按照二進制表示來分割。例如

ll ksm(ll a,ll b,ll p){ll ans=1;while(b){if(b&1) ans=ans*a%p;//b & 1:用按位與運算判斷 b 的二進制最低位是否為 1(比如 b=5 是 101,b&1 結果為 1;b=4 是 100,b&1 結果為 0 )。
如果最低位是 1,說明當前這一位對應的冪次需要乘到結果里。
ans = ans * a % p:把當前的 a(對應某一 “二進制位權” 的冪)乘到結果 ans 中,再對 p 取模,保證數值不會溢出,且符合題目對結果取模的要求。a=a*a%p;//每次循環,底數 a 自乘一次(即 a = a2 % p ),對應指數二進制位的位權翻倍。
比如初始 a=3(對應 3 1),第一次自乘后 a=32=9(對應 3 2 ),第二次自乘后 a=92=81(對應 3 4),第三次自乘后 a=812=6561(對應 3 8 )…… 以此類推,剛好匹配指數二進制各位的權值b>>=1;//后移}return ans;
}
  • a:底數,即要做冪運算的基數。
  • b:指數,即冪次。
  • p:模數,計算結果要對?p?取模,避免數值過大溢出或滿足題目對結果范圍的要求。

?

2. 矩陣快速冪

矩陣快速冪 = 矩陣乘法 + 快速冪。

單位矩陣是對角線全為 1,其他位置均為 0 的矩陣,記為 I,性質:A×I=A。

include <iostream>
#include <cstring>
using namespace std;typedef long long LL;         // 使用LL作為long long的別名,簡化代碼
const int MOD = 1e9 + 7;      // 定義模數,防止整數溢出
const int N = 105;            // 定義矩陣的最大尺寸int n;                        // 矩陣的實際大小
LL k;                         // 矩陣需要乘方的次數// 矩陣結構體,封裝矩陣乘法和單位矩陣設置操作
struct Matrix {LL a[N][N];               // 存儲矩陣元素// 默認構造函數,初始化矩陣為全0Matrix() {memset(a, 0, sizeof a);}// 重載乘法運算符,實現矩陣乘法Matrix operator*(const Matrix& b) const {Matrix c;// 三層循環實現矩陣乘法,注意取模防止溢出for (int i = 1; i <= n; i++)for (int k = 1; k <= n; k++)for (int j = 1; j <= n; j++)c.a[i][j] = (c.a[i][j] + a[i][k] * b.a[k][j]) % MOD;return c;}// 設置當前矩陣為單位矩陣(對角線為1,其余為0)void setIdentity() {for (int i = 1; i <= n; i++) a[i][i] = 1;}
};int main() {cin >> n >> k;  // 輸入矩陣大小n和冪次k// 讀取原始矩陣Matrix base;for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++)cin >> base.a[i][j];// 初始化結果矩陣為單位矩陣,相當于數值計算中的1Matrix res;res.setIdentity();// 快速冪算法:計算矩陣的k次冪// 原理與數值快速冪相同,但使用矩陣乘法代替數值乘法while (k) {if (k & 1) res = res * base;  // 如果當前位為1,則乘上當前的basebase = base * base;            // base平方k >>= 1;                       // k右移一位,相當于除以2}// 輸出結果矩陣for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++)cout << res.a[i][j] << ' ';cout << endl;}return 0;
}

?

?

??擴展歐幾里得算法

?一、核心目標:求解?ax + by = gcd(a, b)?的整數解

擴展歐幾里得算法本質是?在求最大公約數(gcd)的同時,找到滿足?ax + by = gcd(a, b)?的整數?x?和?y?。
比如:a=5, b=3,gcd 是 1,同時能找到?x=2, y=-3(因為?5×2 + 3×(-3) = 10-9=1 = gcd(5,3)?)。


?二、遞歸推導:從?gcd(b, a%b)?反推?gcd(a, b)?的解

歐幾里得算法的核心是?gcd(a, b) = gcd(b, a%b)(比如?gcd(5,3)=gcd(3,2)=gcd(2,1)=gcd(1,0)=1?)。
擴展歐幾里得在此基礎上,遞歸地從?gcd(b, a%b)?的解,反推?gcd(a, b)?的解

ll exgcd(ll a, ll b, ll &x, ll &y){ // 傳引用修改 x、yif(b == 0){ // 遞歸出口:b=0時,gcd是a,解為x=1, y=0x = 1; y = 0; return a; }// 遞歸求解 gcd(b, a%b),同時得到子問題的解 (x', y')ll d = exgcd(b, a % b, y, x); // 注意:這里交換了 y、x 的位置!// 子問題的解是 (x', y'),但因為交換了參數,實際拿到的是 y=x', x=y' // 根據推導公式,當前層的 y = x' - (a/b)*y' y -= (a / b) * x; return d; // 返回 gcd(a,b)
}

以?a=5, b=3?為例,逐步看遞歸和求解過程:

  1. 第一層調用exgcd(5, 3, x, y)

    • b≠0,遞歸調用?exgcd(3, 5%3=2, y, x)
  2. 第二層調用exgcd(3, 2, y, x)

    • b≠0,遞歸調用?exgcd(2, 3%2=1, y, x)
  3. 第三層調用exgcd(2, 1, y, x)

    • b≠0,遞歸調用?exgcd(1, 2%1=0, y, x)
  4. 第四層調用exgcd(1, 0, y, x)

    • b=0,觸發遞歸出口:x=1, y=0,返回?d=1(即 gcd=1 )
  5. 返回第三層

    • 此時?d=1,且因為參數交換,當前層的?y?是子問題的?x=1x?是子問題的?y=0
    • 執行?y -= (2/1)*x?→?y = 0 - 2*1 = -2
    • 返回?d=1,當前層的解是?x=0, y=-2?不對?別急,繼續看… 其實這里的?x,y?是相對于當前層?a=2, b=1?的,?哦,因為參數交換后,邏輯需要再仔細看

    實際第三層的調用是?exgcd(2, 1, y, x),所以子問題(第四層)的?x=1, y=0?會被賦值給?當 前層的?y?和?x?,即:

    • 當前層(第三層)的?y?= 子問題的?x=1
    • 當前層(第三層)的?x?= 子問題的?y=0
      然后執行?y -= (2/1)*x?→?y = 1 - 2*0 = 1
      所以第三層的解是?x=0, y=1,對應等式?2*0 + 1*1 = 1 = gcd(2,1),正確!
  6. 返回第二層

    • 第二層調用是?exgcd(3, 2, y, x),子問題(第三層)返回?d=1,且當前層的?y?= 第三層的?x=0x?= 第三層的?y=1
    • 執行?y -= (3/2)*x?→?3//2=1,所以?y = 0 - 1*1 = -1
    • 此時第二層的解是?x=1, y=-1,對應等式?3*1 + 2*(-1) = 3-2=1 = gcd(3,2),正確!
  7. 返回第一層

    • 第一層調用是?exgcd(5, 3, x, y),子問題(第二層)返回?d=1,且當前層的?y?= 第二層的?x=1x?= 第二層的?y=-1
    • 執行?y -= (5/3)*x?→?5//3=1,所以?y = 1 - 1*(-1) = 2
    • 此時第一層的解是?x=-1, y=2,對應等式?5*(-1) + 3*2 = -5+6=1 = gcd(5,3),正確!

最終,exgcd(5,3,x,y)?執行后,x=-1, y=2,滿足?5*(-1) + 3*2 = 1?。

?

乘法逆元

1. 基本概念

更準確的來說是模意義下的乘法逆元。單位元:在一個集合中,對于某種運算?,如果對于任何的集合元素 a,和元素 e 運算,得到還是集合元素 a 本身,則稱 e 為這個運算下的單位元。例如加法運算的單位元是 0,乘法的單位元是 1。逆元:在一個集合中,對于某種運算?,如果任意兩個元素的運算結果等于單位元,則稱這兩個元素互為逆元。加法中 a 的逆元是 - a,乘法中 a 的逆元是a1?即a?1。所以,數學上的乘法逆元就是直觀上的倒數,即ax=1,x 即為 a 的逆元。對于模意義下的乘法逆元,即滿足ax≡1(modb)時,則稱 x 為 a 關于模 b 的逆元。

很容易看出來,這是擴展歐幾里得的一種運用?

擴展歐幾里得法

ax≡1(modb)?ax+by=1

?但是利用以上的歐幾里得,我們只能求出最近的一個乘法逆元,比如3m10,得到-3;

此時,應該進行魔術技巧

x = (x % n + n) % n

操作,把不論正負,求取最小正數逆元

費馬小定理法

定義:若 p 為質數,gcd(a,p)=1,則ap?1≡1?(mod p)。

證明:

  • 因為ax≡1(modb)
  • 所以ax≡ab?1(modb)
  • 故x≡ab?2(modb)

然后就可以用快速冪求解,時間復雜度為O(logb)。?

ll inv(ll a,ll p){return ksm(a,p-2,p);//ksm上面呢
}

線性求逆元

求出 1-n 中每個數的逆元。

void getinv(ll n){inv[1] = 1;for(int i = 2; i <= n; ++i){inv[i] = (p - (p / i)) * inv[p % i] % p;}
}

?

線性求逆元的遞推公式

對于任意一個數 i,它的逆元?inv[i]?可以通過如下遞推公式計算得出

inv[i]=(p??p/i?)×inv[p%i]%p

推導:

????????我們令?k=?p/i??以及?r=p%i,那么顯然有?p=k×i+r,也就是?k×i+r≡0(modp)。

????????對這個同余式進行變形,在等式兩邊同時乘以?i?1×r?1,就可以得到?k×r?1+i?1≡0(modp)。

????????進一步移項,就能得到?i?1≡?k×r?1(modp)。

????????為了保證逆元是正數,我們把公式調整為?i?1≡(p?k)×r?1(modp),這里的 r 其實就是?p%i。

遞推的起始條件
當 i 等于 1 時,它的逆元毫無疑問是 1,即?inv[1]=1,這是整個遞推過程的起點。

?

組合數學?

基本求法

ll res[N][N];//記憶化,避免重復計算
ll C(ll n,ll m){if(m ==0 || n == m) return 1;if(res[n][m])return res[n][m];//調用記憶return res[n][m] = C(n - 1, m) + C(n - 1, m - 1);
}

也可以將記憶化演變成動態規劃

#include<bits/stdc++.h>
#define ll long long
using namespace std;
int main(){ll n, m, p;cin>>n>>m>>p;ll total = n + m;vector<vector<ll>> C(total + 1, vector<ll>(total + 1, 0));        // 預處理組合數for(int i = 0; i <= total; i++){C[i][0] = 1 % p;C[i][i] = 1 % p;for(int j = 1; j < i; j++){C[i][j] = (C[i-1][j] + C[i-1][j-1]) % p;}cout<<C[total][n]<<endl;return 0;
}

ps:面對過大數據空間會炸?

?

Lucas 定理?

ll Lucas(ll n, ll m){if(m == 0) return 1;return Lucas(n / p, m / p) * C(n % p, m % p) % p;
}

?逆元法求組合(利用費馬

由于公式

我們想,能不能直接利用階乘自己取模后相除

但是當需要計算?C(n,m)modp?時,不能直接對分子和分母分別取模后相除,因為模運算的除法不滿足分配律

逆元的作用是將模意義下的除法轉換為乘法

(ps,-1不是次方,是逆元的意思)

ll comb(ll n, ll m, ll p) {//這里n上,m下if (m < 0 || m > n) return 0;// 預處理階乘數組vector<ll> fact(n + 1, 1);for (ll i = 1; i <= n; i++) {fact[i] = fact[i - 1] * i % p;}// 計算逆元:fact[m]^(-1) 和 fact[n-m]^(-1)ll inv_m = mod_pow(fact[m], p - 2, p);ll inv_nm = mod_pow(fact[n - m], p - 2, p);//費馬// 計算組合數return fact[n] * inv_m % p * inv_nm % p;
}

?盧卡斯與逆元結合

include <bits/stdc++.h>
using namespace std;typedef long long ll;// 快速冪計算 a^b % p
ll quick_pow(ll a, ll b, ll p) {ll res = 1;while (b > 0) {if (b & 1) res = res * a % p;a = a * a % p;b >>= 1;}return res;
}// 計算組合數 C(a, b) % p,其中 a < p,b < p
ll comb(ll a, ll b, ll p) {if (b < 0 || b > a) return 0;if (b == 0 || b == a) return 1;// 預處理階乘和逆元vector<ll> fact(p), inv_fact(p);fact[0] = 1;for (int i = 1; i < p; ++i) {fact[i] = fact[i - 1] * i % p;}inv_fact[p - 1] = quick_pow(fact[p - 1], p - 2, p);for (int i = p - 2; i >= 0; --i) {inv_fact[i] = inv_fact[i + 1] * (i + 1) % p;}return fact[a] * inv_fact[b] % p * inv_fact[a - b] % p;
}// 盧卡斯定理計算 C(n, m) % p
ll lucas(ll n, ll m, ll p) {if (m == 0) return 1;return comb(n % p, m % p, p) * lucas(n / p, m / p, p) % p;
}int main() {ios::sync_with_stdio(false);cin.tie(0);int T;cin >> T;while (T--) {ll n, m, p;cin >> n >> m >> p;// 計算 C(n+m, n) % pcout << lucas(n + m, n, p) << '\n';}return 0;
}

卡特蘭數?

?catalan數-CSDN博客

?

排列組合與容斥原理

1. 排列數公式

  • 從 n 個元素中選 m 個排列:Anm?=n×(n?1)×?×(n?m+1)=n!/(n?m)!?。

2. 容斥原理基礎

  • 兩個集合:∣A∪B∣=∣A∣+∣B∣?∣A∩B∣。
  • 三個集合:∣A∪B∪C∣=∣A∣+∣B∣+∣C∣?∣A∩B∣?∣A∩C∣?∣B∩C∣+∣A∩B∩C∣。
  • 應用場景:計算不滿足某些條件的元素個數,如求 1~n 中不被 2、3、5 整除的數的個數。

?

快速傅里葉變換(FFT)

1. 核心作用

  • 加速多項式乘法,將暴力O(n2)的復雜度優化到O(nlogn)。
  • 原理:利用復數單位根的性質,將多項式從系數表示轉為點值表示,相乘后再逆變換回系數表示。

2. 基本步驟

  1. 預處理單位根:計算復數域上的 n 次單位根
  2. FFT 正變換(DFT):將多項式轉換為點值形式。
  3. 點值相乘:對應點值相乘得到結果多項式的點值表示。
  4. 逆變換(IDFT):轉換回系數形式

?框架(搞不懂,看不懂,不明白,所以就貼了個碼)

const double PI = acos(-1);
struct Complex {double x, y;Complex(double x=0, double y=0) : x(x), y(y) {}
};
Complex operator+(Complex a, Complex b) { return Complex(a.x+b.x, a.y+b.y); }
Complex operator-(Complex a, Complex b) { return Complex(a.x-b.x, a.y-b.y); }
Complex operator*(Complex a, Complex b) { return Complex(a.x*b.x-a.y*b.y, a.x*b.y+a.y*b.x); }void fft(Complex *a, int n, int inv) {if (n == 1) return;Complex a1[n/2], a2[n/2];for (int i = 0; i < n; i++) {if (i % 2 == 0) a1[i/2] = a[i];else a2[i/2] = a[i];}fft(a1, n/2, inv); fft(a2, n/2, inv);Complex w(1, 0), wn(cos(2*PI/n), inv*sin(2*PI/n));for (int i = 0; i < n/2; i++) {a[i] = a1[i] + w * a2[i];a[i+n/2] = a1[i] - w * a2[i];w = w * wn;}if (inv == -1) {for (int i = 0; i < n; i++) a[i].x /= n;}
}// 計算多項式乘法c = a * b,a和b的次數分別為n和m
void multiply(ll *a, ll *b, ll *c, int n, int m) {int len = 1;while (len < n + m) len <<= 1;Complex *fa = new Complex[len], *fb = new Complex[len];for (int i = 0; i < n; i++) fa[i] = Complex(a[i], 0);for (int i = n; i < len; i++) fa[i] = Complex(0, 0);for (int i = 0; i < m; i++) fb[i] = Complex(b[i], 0);for (int i = m; i < len; i++) fb[i] = Complex(0, 0);fft(fa, len, 1); fft(fb, len, 1);for (int i = 0; i < len; i++) fa[i] = fa[i] * fb[i];fft(fa, len, -1);for (int i = 0; i < n + m; i++) c[i] = (ll)(fa[i].x + 0.5);delete[] fa; delete[] fb;
}

?

?

?

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/913380.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/913380.shtml
英文地址,請注明出處:http://en.pswp.cn/news/913380.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Ubuntu20.04.6桌面版系統盤制作與安裝

概述 本教程講述Ubuntu20.04.6桌面版的系統U盤制作與安裝&#xff0c;所需工具為一臺電腦、大于4G的U盤、一個需要安裝Ubuntu系統的主機。 步驟1&#xff1a;下載系統鏡像與rufus 在ubuntu官網下載 ubuntu-20.04.6-desktop-amd64.iso&#xff0c;如圖 下載rufus工具&#xf…

【C++復習3】類和對象

1.3.1.簡述一下什么是面向對象回答&#xff1a;1. 面向對象是一種編程思想&#xff0c;把一切東西看成是一個個對象&#xff0c;比如人、耳機、鼠標、水杯等&#xff0c;他們各 自都有屬性&#xff0c;比如&#xff1a;耳機是白色的&#xff0c;鼠標是黑色的&#xff0c;水杯是…

數據結構之二叉平衡樹

系列文章目錄 數據結構之ArrayList_arraylist o(1) o(n)-CSDN博客 數據結構之LinkedList-CSDN博客 數據結構之棧_棧有什么方法-CSDN博客 數據結構之隊列-CSDN博客 數據結構之二叉樹-CSDN博客 數據結構之優先級隊列-CSDN博客 常見的排序方法-CSDN博客 數據結構之Map和Se…

Maven引入第三方JAR包實戰指南

要將第三方提供的 JAR 包引入本地 Maven 倉庫&#xff0c;可通過以下步驟實現&#xff08;以 Oracle JDBC 驅動為例&#xff09;&#xff1a;&#x1f527; 方法 1&#xff1a;使用 install:install-file 命令&#xff08;推薦&#xff09;定位 JAR 文件 將第三方 JAR 包&#…

JavaSE -- 泛型詳細介紹

泛型 簡介 集合存儲數據底層是利用 Object 來接收的&#xff0c;意思是說如果不對類型加以限制&#xff0c;所有數據類型柔和在一起&#xff0c;這時如何保證數據的安全性呢&#xff08;如果不限制存入的數據類型&#xff0c;任何數據都能存入&#xff0c;當我們取出數據進行強…

使用 Python 實現 ETL 流程:從文本文件提取到數據處理的全面指南

文章大綱&#xff1a; 引言&#xff1a;什么是 ETL 以及其重要性 ETL&#xff08;提取-轉換-加載&#xff09;是數據處理領域中的核心概念&#xff0c;代表了從源數據到目標系統的三個關鍵步驟&#xff1a;**提取&#xff08;Extract&#xff09;**數據、**轉換&#xff08;Tra…

selenium基礎知識 和 模擬登錄selenium版本

前言 selenium框架是Python用于控制瀏覽器的技術,在Python爬蟲獲取頁面源代碼的時候,是最重要的技術之一,通過控制瀏覽器,更加靈活便捷的獲取瀏覽器中網頁的源代碼。 還沒有安裝啟動selenium的同志請先看我的上一篇文章進行配置啟動 和 XPath基礎 對selenium進行瀏覽器和驅動…

JS 網頁全自動翻譯v3.17發布,全面接入 GiteeAI 大模型翻譯及自動部署

兩行 js 實現 html 全自動翻譯。 無需改動頁面、無語言配置文件、無 API Key、對 SEO 友好&#xff01; 升級說明 translate.service 深度綁定 GiteeAI 作為公有云翻譯大模型算力支持translate.service 增加shell一鍵部署后通過訪問自助完成GiteeAI的開通及整個接入流程。增加…

數據結構:數組:插入操作(Insert)與刪除操作(Delete)

目錄 插入操作&#xff08;Inserting in an Array&#xff09; 在紙上模擬你會怎么做&#xff1f; 代碼實現 復雜度分析 刪除操作&#xff08;Deleting from an Array&#xff09; 在紙上模擬一下怎么做&#xff1f; 代碼實現 復雜度分析 插入操作&#xff08;Inserti…

Qt之修改純色圖片的顏色

這里以修改QMenu圖標顏色為例,效果如下: MyMenu.h #ifndef MYMENU_H #define MYMENU_H#include <QMenu>class MyMenu : public QMenu { public:explicit MyMenu(QWidget *parent = nullptr);protected:void mouseMoveEvent(QMouseEvent *event) override; };#endif /…

uni-app實現單選,多選也能搜索,勾選,選擇,回顯

前往插件市場安裝插件下拉搜索選擇框 - DCloud 插件市場&#xff0c;該插件示例代碼有vue2和vue3代碼 是支持微信小程序和app的 示例代碼&#xff1a; <template><view><!-- 基礎用法 --><cuihai-select-search:options"options"v-model&quo…

【機器學習深度學習】 微調的十種形式全解析

目錄 一、為什么要微調&#xff1f; 二、微調的 10 種主流方式 ? 1. 全參數微調&#xff08;Full Fine-tuning&#xff09; ? 2. 凍結部分層微調&#xff08;Partial Fine-tuning&#xff09; ? 3. 參數高效微調&#xff08;PEFT&#xff09; &#x1f538; 3.1 LoRA&…

信刻光盤安全隔離與文件單向導入/導出系統

北京英特信網絡科技有限公司成立于2005年&#xff0c;是專業的數據光盤擺渡、刻錄分發及光盤存儲備份領域的科技企業&#xff0c;專注為軍隊、軍工、司法、保密等行業提供數據光盤安全擺渡、跨網交換、檔案歸檔檢測等專業解決方案。 公司立足信創產業&#xff0c;產品國產安全可…

Python-標準庫-os

1 需求 2 接口 3 示例 4 參考資料 在 Python 中&#xff0c;os&#xff08;Operating System&#xff09;模塊是一個非常重要的內置標準庫&#xff0c;提供了許多與操作系統進行交互的函數和方法&#xff0c;允許開發者在 Python 程序中執行常見的操作系統任務&#xff0c;像文…

OpenCV CUDA模塊設備層-----在 GPU 上執行類似于 std::copy 的操作函數warpCopy()

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 OpenCV 的 CUDA 模塊&#xff08;cudev&#xff09; 中的一個設備端內聯模板函數&#xff0c;用于在 GPU 上執行類似于 std::copy 的操作&#xff…

Vue Router 中$route.path與 params 的關系

1. params 參數的本質&#xff1a;路徑的動態片段在 Vue Router 中&#xff0c;params 參數是通過路由配置的動態路徑片段定義的&#xff0c;例如&#xff1a;// 路由配置{ path: /user/:id, component: User }當訪問/user/123時&#xff0c;/user/123是完整的路徑&#xff0c;…

React 極簡響應式滑塊驗證組件實現,隨機滑塊位置

&#x1f3af; 滑塊驗證組件 (Slider Captcha) 一個現代化、響應式的滑塊驗證組件&#xff0c;專為 React 應用設計&#xff0c;提供流暢的用戶體驗和強大的安全驗證功能。 ? 功能特性 &#x1f3ae; 核心功能 智能滑塊拖拽 – 支持鼠標和觸摸屏操作&#xff0c;響應靈敏隨…

STM32第十六天藍牙模塊

一&#xff1a;藍牙模塊HC-05 1&#xff1a;硬件引腳配置&#xff1a; | 標號 | PIN | 說明 | |------|-------|---------------------------------------| | 1 | START | 狀態引出引腳&#xff08;未連接/連接輸出信號時&#xff09; |…

時序數據庫IoTDB用戶自定義函數(UDF)使用指南

1. 編寫UDF時序數據庫IoTDB為用戶提供了編寫UDF的JAVA API&#xff0c;用戶可以自主實現UDTF&#xff08;用戶自定義轉換函數&#xff09;類&#xff0c;IoTDB將通過類加載機制裝載用戶編寫的類。Maven依賴如果使用Maven&#xff0c;可以從Maven庫中搜索以下依賴&#xff0c;并…

Linux國產與國外進度對壘

Linux國產與國外進度對壘 引言國產Linux的發展現狀國外Linux的發展現狀技術對比國產Linux的挑戰與機遇國外Linux的優勢與局限結論 引言 簡述Linux在全球操作系統市場中的地位國產Linux的發展背景與意義國外主流Linux發行版的現狀 國產Linux的發展現狀 主要國產Linux發行版介…