数论(待改)


a+tm=b+tn(mod l)

a-b=t(n-m)(mod l)
a+tm=b+tn+kl
(a-b)=t(m-n)+kl

ax+by=gcd(a,b)

ax1+by1=gcd(a,b)
(b)x2+(a-a/b*b)y2=gcd(b,a%b)
(b)x2+(a)y2-(a/b*b)y2=gcd(b,a%b)
(b)x2+(a)y2-floor(a/b)*b*y2=gcd(b,a%b)
(b)(x2-floor(a/b)*y2)+(a)y2
所以
x1=y2

y1=(x2-floor(a/b)*y2)

 手推

k*i+r=p
k*i+r=0(mod p)
k*i^-1*r^-1=-r*i^-1*r^-1(mod p)

k*r^-1=-i^-1(mod p)
i^-1=-k*r^-1(mod p)
k=floor(p/i);r=p-floor(p/i)*i
即i的乘法逆元为
-floor(p/i)*(p%i)^-1(mod p)
inv[i]=-floor(p/i)*inv[p%i](mod p)=]=-floor(p/i)*inv[p%i]%p

#include<bits/stdc++.h>using namespace std;bool haveearo=false;int n;const double x=0.000001;bool vis[200];double a[200][20000];double d[200];int main(){scanf("%d",&n);for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){scanf("%lf",&a[i][j]);}scanf("%lf",&d[i]);}for(int k=1;k<=n;k++){int to;for(int i=1,maxn=-0x7fffffff;i<=n;i++)//找最大 {if(fabs(a[i][k])>maxn&&vis[i]==false){maxn=fabs(a[i][k]);to=i;}}if(0-x<=a[to][k]&&a[to][k]<=0+x){haveearo=true;continue;}double chu=a[to][k];swap(d[1],d[to]);swap(vis[1],vis[to]);vis[1]=true;d[1]/=chu;for(int i=1;i<=n;i++){swap(a[1][i],a[to][i]);a[1][i]/=chu;}for(int i=2;i<=n;i++){chu=a[i][k]/a[1][k];double t;for(int j=k;j<=n;j++){t=a[1][j]*chu;a[i][j]=a[i][j]-t;}double dt=d[1]*chu;d[i]=d[i]-dt;}}//判断无穷解 bool ok=false;if(haveearo==true){for(int i=1;i<=n;i++){ok=false;if(d[i]!=0){ok=true;}for(int j=1;j<=n;j++){if(a[i][j]!=0){ok=true;break;}}if(ok==false){printf("0\n");return 0;}}printf("-1\n");return 0;}for(int k=1;k<=n;k++){for(int i=1;i<=n;i++){if(1-x<=a[i][k]&&a[i][k]<=1+x){printf("x%d=%.2lf\n",k,d[i]);break;}}}return 0;}

原文地址:https://www.cnblogs.com/HKHbest/p/13499149.html