1. 程式人生 > 其它 >2022年3月14日:開始學習線性代數和組合數學

2022年3月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。