2022年3月14日:開始學習線性代數和組合數學
阿新 • • 發佈:2022-03-14
1.看了組合數學:
bilibili:演算法競賽入門——初等數論與組合數學初步(有四個檔案)
學到了:
- 逆元
- 歐幾里得演算法和證明
- 擴充套件歐幾里得演算法
- 中國剩餘定理的公式
- 各種素數判斷
- 素數篩
- 組合數和楊輝三角的關係
- 奇葩的算組合數的方法(O(最大數值+訪問次數))
2.刷題:
#include<bits/stdc++.h> using namespace std; int main(){ int n,x,y; cin>>n; int mn=0,l[130],v[10005]; memset(v,0,sizeof(int)*10004); for(int i=0;i<n;i++){ cin>>l[i]; mn=max(mn,l[i]); } x=mn;mn=0; for(int i=0;i<n;i++){ if((v[i]+=(x%l[i]==0))!=1)mn=max(mn,l[i]); } y=mn; cout<<x<<" "<<y; return 0; }
原理非常簡單,先假設x>y,因為一個數的約數一定小於等於自己(當然),所以序列中最大的數是x(也很當然),然後從序列中去掉x的約數每個一次,剩下一定是y的所有約數(還是當然),其中最大的數一定是y。