结构体类型快速驱魔运算及运算符的重载
2014-07-18 15:45
225 查看
下面得到这段代码可以用在很多地方:只需要自己修改下接Ok.
struct Matrix { long long mat ; Matrix operator*(const Matrix m)const//定义矩阵乘法的运算符* { Matrix tmp; for(int i = 0;i < n;i++) { for(int j = 0;j < n;j++) { tmp.mat[i][j] = 0; for(int k = 0;k < n;k++) { tmp.mat[i][j] += mat[i][k]*m.mat[k][j]%MOD;//这里需要重点掌握 tmp.mat[i][j] %= MOD; } } } return tmp; } }; long long Pow(Matrix &m,int k) { Matrix ans; memset(ans.mat,0,sizeof(ans.mat)); for(int i = 0;i < n;i++) ans.mat[i][i] = 1; while(k) { if(k&1) ans = ans*m;//这里是以二进制形式转化的,需要细细体会 k >>= 1; m = m*m; } long long sum = 0; for(int i = 0;i < n;i++) { sum += ans.mat[i][i]%MOD;//这里需要注意,这里和先把所有数据加起来再取模是等价的。 sum %= MOD; } return sum; }
相关文章推荐
- 《第九周任务一》定义Complex类中的《《和》》运算符的重载,实现输入和输出,改造原程序中对运算结果显示方式,使程序读起来更自然
- 第九周实验报告 任务2 定义Complex类中的<<和>>运算符的重载,实现输入和输出,改造原程序中对运算结果显示方式,使程序读起来更自然。
- 8-1——复数类运算符的重载 double数据与复数之间的运算 任务三
- 运算符的重载(一目运算)
- 第八周任务四——关于分数与整数运算一各种运算符的重载
- 洗刷刷——实现复数运算中+运算符的重载
- 《第九周任务二》定义Time类中的<<和>>运算符的重载,实现时间输入输出,改造源程序中对运算结果的显示方式,使程序读起来更自然
- 第九周【项目1】在第8周项1的基础上(1)再定义一目运算符 -,-c相当于0-c(2)定义Complex类中的<<和>>运算符的重载,实现输入和输出,改造原程序中对运算结果显示方式,使程序读起来更自然
- 建立一个二维坐标系的类TwoCoor,用x、y表示坐标值,实现两坐标点的加减运算,计算两坐标点之间的距离,并重载输入输出运算符,使之能够直接输入输出坐标点的坐标值。
- C++之运算符的重载实现大数的运算
- [置顶] 8-1——复数类运算符的重载 double数据与复数之间的运算 任务三
- 定义分数的一目运算+和-,分别代表分数取正和求反,将“按位取反运算符”~重载为分数的求倒数运算。
- [置顶] 8-1——复数类运算符的重载 double数据与复数之间的运算 任务三
- 运算符的重载(复数的相关运算)
- 运算符重载(复数运算(+、-、*重载),输入、出类对象(流类运算符>>/<<的重载))
- 定义分数的一目运算+和-,分别代表分数取正和求反,将“按位取反运算符”~重载为分数的求倒数运算。
- 重载一个+运算符、<<运算符和>运算符。实现对分数的运算
- [二分]取余运算||快速幂
- C++ : 复数运算“<<”函数重载和“+”、“—”重载
- Ruby快速入门(二):变量、数字、数组和运算符