专栏文章
提高级数学专题记录
个人记录参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mioffhcx
- 此快照首次捕获于
- 2025/12/02 18:19 3 个月前
- 此快照最后确认于
- 2025/12/02 18:19 3 个月前
数论分块
以 的复杂度求出 的值。
CPPfor(int l=1,r=0;l<=n;l=r+1){
r=n/(n/l);
ans+=1ll*(r-l+1)*(n/l);
}
矩阵
不细说。
CPPstruct matrix{
int n,m;
ll a[105][105];
};
il matrix operator+(const matrix &x,const matrix &y){
matrix ans;
if(x.n!=y.n||x.m!=y.m){
DEBUG;
exit(0);
}
ans=x;
up(i,1,ans.n){
up(j,1,ans.m){
ans.a[i][j]+=y.a[i][j];
ans.a[i][j]%=mod;
}
}
return ans;
}
il matrix operator*(const matrix &x,const matrix &y){
matrix ans;
if(x.m!=y.n){
DEBUG;
exit(0);
}
ans.n=x.n;ans.m=y.m;
up(i,1,ans.n){
up(j,1,ans.m){
ans.a[i][j]=0;
up(k,1,x.m){
ans.a[i][j]+=1ll*x.a[i][k]*y.a[k][j];
ans.a[i][j]%=mod;
}
}
}
return ans;
}
il matrix operator^(matrix x,ll k){
if(x.n!=x.m){
DEBUG;
exit(0);
}
matrix ans;
ans.n=ans.m=x.n;
up(i,1,ans.n){
up(j,1,ans.m){
ans.a[i][j]=(i==j);
}
}
while(k){
if(k&1) ans=ans*x;
x=x*x;
k>>=1;
}
return ans;
}
高斯消元
CPPil bool is0(db x){
return abs(x)<=eps;
}
il void Swap(int x,int y){
if(x==y) return;
up(i,1,n+1) swap(a[x][i],a[y][i]);
}
il void reduce(int x,int y){
db val=a[x][y];
up(i,1,n+1) a[x][i]/=val;
up(i,1,n){
if(i==x) continue;
val=a[i][y];
up(j,1,n+1) a[i][j]-=val*a[x][j];
}
}
void Main(int cases){
n=read();
up(i,1,n){
up(j,1,n+1){
cin>>a[i][j];
}
}
up(i,1,n){
up(j,cnt+1,n){//找到一个第i列不为0的行
if(!is0(a[j][i])){
Swap(j,cnt+1);
break;
}
}
if(!is0(a[cnt+1][i])){//找到了一个非零
reduce(cnt+1,i);
cnt++;
}
}
if(cnt==n){//唯一解
up(i,1,n){
cout<<fixed<<setprecision(2)<<a[i][n+1]<<endl;
}
}else cout<<"No Solution"<<endl;
return;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...