数学模板
前言
用大样例hack你的都是流氓
好吧,我矩阵那里多次写挂,所以写点不会炸心态的。
裴蜀定理(贝祖定理)
定理内容:
\[ax + by = c \; (x\in Z^{+},y\in Z^{+}) \Leftrightarrow \; gcd(a,b) | c
\]
题目
给定一个包含 \(n\) 个元素的整数序列 \(A\),记作 $ A_1,A_2,A_3,...,A_n$
求另一个包含 \(n\) 个元素的待定整数序列 \(X\),记 $ S=\sum\limits_{i=1}^nA_i\times X_i $使得 \(S>0\) 且 \(S\) 尽可能的小。
解
推广:
\[a_1x_1+a_2x_2+……+a_nx_n=S \; \Leftrightarrow \; gcd(a_1,a_2……a_n) \mid S
\]
所以最小的正 \(S\) 为这些数的\(gcd\)
如果有负数,要取其绝对值
code
#include<bits/stdc++.h>
using namespace std;
int n,s,x,y;
int gcd(int a,int b){return b==0?a:gcd(b,a%b);}
int main(){
cin>>n;
if(n==1){
cin>>x;
if(x<0)x=-x;
cout<<x;
}
if(n>=2){
cin>>x>>y;
if(x<0)x=-x;
if(y<0)y=-y;
s=gcd(x,y);
}
n-=2;
while(n--){
cin>>x;
if(x<0)x=-x;
s=gcd(s,x);
}
cout<<s;
return 0;
}
二元一次不定方程
题目
给定\(T\)组不定方程
\[ax+by=c
\]
若该方程无整数解,输出 \(-1\)。
若该方程有整数解,且有正整数解,则输出:
其正整数解的数量,
所有正整数解中 \(x\) 的最小值,
所有正整数解中 \(y\) 的最小值,
所有正整数解中 \(x\) 的最大值,
以及所有正整数解中 \(y\) 的最大值。
若方程有整数解,但没有正整数解,你需要输出:
所有整数解中 \(x\) 的最小正整数值, \(y\) 的最小正整数值。
正整数解即为 \(x, y\) 均为正整数的解,
\(\boldsymbol{0}\) 不是正整数。
整数解即为 \(x,y\) 均为整数的解。
座右铭:我从来没有见过这样阴郁而又光明的日子。