第一次培訓,心情有點激動(盡管沒了清明節),還見到了各地的dalao們,十分開森
Day 1(李昊dalao)
上午篇
上午呢,主要講了關于高精,快速冪,膜模意義下的運算,篩素數,費馬小定理以及歐拉定理,歐拉函數。。。
我印象最深刻的,便是dalao的c++必備head(頭文件及各種令人窒息的define)
?讓人頭腦一熱QAQ
高精度(先全部考慮非負數)
高精度主要分為以下幾個部分
1.高精度加法:
思路:模擬豎式運算
注意:進位
優化:壓位
2.高精度減法:
思路:同加法相似,模擬豎式運算,進位變為退位
注意:結果為負數的情況
?
3.高精乘
思路:類似,模擬豎式運算,考慮進位
注意:結果為0的情況
4.高精除以單精(高精除以高精在日常并不常用)
至于負數的情況呢QAQ
加法:
減法:
乘法:
除法同理。。。
膜模意義下的運算
這一個就聽得十分有意思(畢竟我提前了解了一下)
這里需注意:無除法運算(很容易遺忘)
性質:
快速冪:
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; }
類似于這樣的操作
費馬小定理/歐拉定理
在模意義下有這個東西:
顯然二者有推廣關系
篩法
前面講過,這里就不一一贅述
歐拉函數
#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; }
?還講了一堆十分神奇的東西:
矩陣樹定理
讓人十分慌張。。。
有向圖 - 矩陣樹定理
讓人更加慌張。。。
so:這一下午就在慌張中過去了QAQ
之后還會有題目的整理鴨!!!
?