日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

清北学堂培训2019.4.4

發布時間:2025/3/8 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 清北学堂培训2019.4.4 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
第一次培訓,心情有點激動(盡管沒了清明節),還見到了各地的dalao們,十分開森

Day 1(李昊dalao)

上午篇

上午呢,主要講了關于高精,快速冪,模意義下的運算,篩素數,費馬小定理以及歐拉定理,歐拉函數。。。

我印象最深刻的,便是dalao的c++必備head(頭文件及各種令人窒息的define)

?讓人頭腦一熱QAQ

高精度(先全部考慮非負數)

高精度主要分為以下幾個部分

1.高精度加法:

思路:模擬豎式運算

注意:進位

優化:壓位

2.高精度減法:

思路:同加法相似,模擬豎式運算,進位變為退位

注意:結果為負數的情況

?

3.高精乘

思路:類似,模擬豎式運算,考慮進位

注意:結果為0的情況

4.高精除以單精(高精除以高精在日常并不常用)

至于負數的情況呢QAQ

加法:

?一個數是負數:變為減法 ?兩個數是負數:全部變為正數算加法,最后取負

減法:

?被減數是負數:全部變為正數算加法,最后取負 ?減數是負數:減數取負,變為加法 ?都是負數:都取負,變為減法,即(-減數)-(-被減數)

乘法:

?統計負數個數s ?都變為非負數計算,若s為奇數,最后取負

除法同理。。。

模意義下的運算

這一個就聽得十分有意思(畢竟我提前了解了一下

這里需注意:無除法運算(很容易遺忘)

性質:

?滿足基本的交換律、分配率、結合律 ?對中間結果取模不影響最終答案

快速冪:

1.分治

int calc(int a,int b,int c) {if(b==1){return a;}int tmp=calc(a,b/2,c);tmp=tmp*tmp%c;if(b&1){tmp=tmp*a%c;}return tmp; }

2.快速冪

int ans=1; while(b) {if(b&1){ans=ans*a%c;}a=a*a%c;b/=2; }

類似于這樣的操作

費馬小定理/歐拉定理

在模意義下有這個東西:

?C(n, m) = n! / ( (n-m)! * m! ) ????????????? = n! * ( (n-m)! * m! )^(p-2)

顯然二者有推廣關系

篩法

前面講過,這里就不一一贅述

歐拉函數

#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> #include<cmath> #include<cstdlib> using namespace std; typedef long long ll; typedef long double ld; typedef pair<int,int> pr; const double pi=acos(-1); #define rep(i,a,n) for(int i=a;i<=n;i++) #define per(i,n,a) for(int i=n;i>=a;i--) #define Rep(i,u) for(int i=head[u];i;i=Next[i]) #define clr(a) memset(a,0,sizeof a) #define pb push_back #define mp make_pair #define fi first #define sc second ld eps=1e-9; ll pp=1000000007; ll mo(ll a,ll pp){if(a>=0 && a<pp)return a;a%=pp;if(a<0)a+=pp;return a;} ll powmod(ll a,ll b,ll pp){ll ans=1;for(;b;b>>=1,a=mo(a*a,pp))if(b&1)ans=mo(ans*a,pp);return ans;} ll read(){ll ans=0;char last=' ',ch=getchar();while(ch<'0' || ch>'9')last=ch,ch=getchar();while(ch>='0' && ch<='9')ans=ans*10+ch-'0',ch=getchar();if(last=='-')ans=-ans;return ans; } //head #define N 110000 bool p[N]; int prime[N],tot=0,rec[N],phi[N]; int main(){clr(p);rep(i,2,100000){if(!p[i]){prime[++tot]=i;rec[i]=i;}for(int j=1;j<=tot && prime[j]*i<=100000;j++){p[prime[j]*i]=1;rec[prime[j]*i]=prime[j];if(i%prime[j]==0)break;}}rep(i,2,100000)if(rec[i]==i)phi[i]=i-1;elseif(i%(rec[i]*rec[i])==0)phi[i]=phi[i/rec[i]]*rec[i];else phi[i]=phi[i/rec[i]]*(rec[i]-1);rep(i,2,20)printf("%d : %d\n",i,phi[i]); }

李昊大佬的碼風有些清奇qwq

下午篇

?矩陣

such as:

特殊矩陣:

1.上三角矩陣

2.分塊矩陣

3.對角矩陣

4.對稱矩陣

行列式

?

?需要學一下逆序對(皮一下很舒服

可以學一下這本書@工程數學線性代數

矩陣逆元

說到逆元,以下是洛谷P3811求乘法逆元的正解

#include<bits/stdc++.h> using namespace std; int n,p,inv[25000528]; int main() {scanf("%d%d",&n,&p);inv[1]=1;for(int i=2;i<=n;i++){inv[i]=(long long)(p-p/i)*inv[p%i]%p; }for(int i=1;i<=n;i++){printf("%d\n",inv[i]);}return 0; }

?還講了一堆十分神奇的東西:

矩陣樹定理

?一個圖的鄰接矩陣G:對于無向圖的邊(u,v),G[u][v]++,G[v][u]++ ?一個圖的度數矩陣D:對于無向圖的邊(u,v),D[u][u]++,D[v][v]++ ?而通過這兩個矩陣就可以構造出圖G的基爾霍夫矩陣:C=D-G. ?Matrix Tree定理:將圖G的基爾霍夫矩陣去掉第i行和第i列(i可以取任意值,可以證明所得到的結果相同),得到(n-1)*(n-1)的矩陣,對這個矩陣進行行列式的值求解,abs(det(A))即為圖G的生成樹個數。

讓人十分慌張。。。

有向圖 - 矩陣樹定理

?樹形圖:以i點為根節點的樹形圖有(n-1)條邊,從i節點出發可以到達其他所有(n-1)個節點. ?定義: 有向圖的鄰接矩陣G:對于有向圖的邊(u,v),G[u][v]++. ?有向圖的度數矩陣D:對于有向圖的邊(u,v),D[v][v]++. ?尤其需要注意的是:有向圖的度數矩陣指的是一個點的入度,而不是出度。 ?而有向圖的基爾霍夫矩陣的構造方式是一模一樣的:C=D-G. ?有向圖Matrix Tree定理: ?將有向圖G的基爾霍夫矩陣去掉第i行和第i列,得到(n-1)*(n-1)的矩陣,對這個矩陣進行行列式的值求解,abs(det(A))就是以i為根的樹形圖的個數。

讓人更加慌張。。。

so:這一下午就在慌張中過去了QAQ

之后還會有題目的整理鴨!!!

?

轉載于:https://www.cnblogs.com/gongcheng456/p/10656667.html

總結

以上是生活随笔為你收集整理的清北学堂培训2019.4.4的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。