2022年3月14日:开始学习线性代数和组合数学

1.看了组合数学:

bilibili:算法竞赛入门——初等数论与组合数学初步(有四个文件)

 

学到了:

  • 逆元
  • 欧几里得算法和证明
  • 扩展欧几里得算法
  • 中国剩余定理的公式
  • 各种素数判断
  • 素数筛
  • 组合数和杨辉三角的关系
  • 奇葩的算组合数的方法(O(最大数值+访问次数))

2.刷题:

 

2022年3月14日:开始学习线性代数和组合数学_第1张图片

 

 

 

 

#include
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){
        cin>>l[i];
        mn=max(mn,l[i]);
    }
    x=mn;mn=0;
    for(int i=0;i){
        if((v[i]+=(x%l[i]==0))!=1)mn=max(mn,l[i]);
    }
    y=mn;
    cout<" "<<y;
    return 0;
}

 

原理非常简单,先假设x>y,因为一个数的约数一定小于等于自己(当然),所以序列中最大的数是x(也很当然),然后从序列中去掉x的约数每个一次,剩下一定是y的所有约数(还是当然),其中最大的数一定是y。

你可能感兴趣的:(2022年3月14日:开始学习线性代数和组合数学)