专栏文章

提高级数学专题记录

个人记录参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mioffhcx
此快照首次捕获于
2025/12/02 18:19
3 个月前
此快照最后确认于
2025/12/02 18:19
3 个月前
查看原文

数论分块

O(n)O(\sqrt n) 的复杂度求出 n1+n2+n3++nn\left \lfloor \frac{n}{1}\right \rfloor +\left \lfloor \frac{n}{2}\right \rfloor+\left \lfloor \frac{n}{3}\right \rfloor+\dots+\left \lfloor \frac{n}{n}\right \rfloor 的值。
CPP
for(int l=1,r=0;l<=n;l=r+1){
    r=n/(n/l);
    ans+=1ll*(r-l+1)*(n/l);
}

矩阵

不细说。
CPP
struct 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;
}

高斯消元

CPP
il 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 条评论,欢迎与作者交流。

正在加载评论...