ACM训练半周总结—10月26
来源:互联网 发布:上海雨人软件 编辑:程序博客网 时间:2024/05/29 02:33
这个半周主要还是在看博客,另外还试着做了下题,,,到现在还没做出来。整理下吧。。
快速幂乘取模(a^b%c)
其中利用将b逐步按照二进制分解,a^b%c,当b比较大时可将其分解 。当b为偶数时,a^b%c=(a^(b/2)*a^(b/2))%c;当b为奇数时,a^b%c=(a^(b/2)*a^(b/2)*a)%c。
这个可以解决当幂次特别大时。贴下模版吧
http://www.aiuxian.com/article/p-2262690.html这是大佬的模版
#define LL __int64LL m;//计算a*b % m,将b按二进制分解LL FaMulti(LL a, LL b){ LL res = 0; while(b) { if(b & 1) { res += a; res %= m; } a += a; a %= m; b >>= 1; } return res;}// 计算a^b % m,将b按二进制分解LL FaPow(LL a, LL b){ LL res = 1; while(b) { if(b & 1) { res = FaMulti(res, a); } a = FaMulti(a, a); b >>= 1; } return res;}
矩阵求快速幂
这个方法上面的类似都是利用结合律将其二分化,和整数一样,矩阵也可以有乘积(每一行乘每一列),这是转载的大佬的模版http://www.aiuxian.com/article/p-2262668.htmlMat pow(Mat a, int k){ Mat c; int i, j; c = Mat(); c.n = a.n; c.m = a.n; for(i=1; i<=a.n; ++i) // 初始化为单位矩阵 c.mat[i][i] = 1; while(k) { if(k & 1) // 二进制位为1则执行 c = c*a; a = a*a; k >>= 1; } return c;}
暂时还没A的题,题意:s=(1^1)+(2^2)+....(n^n),给出n,输出s的个位数。
这道题可以发现,两数相乘个位上的数都是成规律变化,像2的就是,2,4,8,6,2,4,8,6,,打表,输出相应位上得数就可以了,
看似很简单的题隐藏着一个巨坑,1<=n<=2*10^100,没留意就交了两发,全Re,估计要整成字符串输入,利用大数除法和取模算出来吧,待会一定要A
出来。
阅读全文
0 0
- ACM训练半周总结—10月26
- ACM训练半周总结—10月19日
- ACM训练半周总结—11月2日
- ACM训练半周总结—11月16日
- ACM训练半周总结—11月23日
- ACM训练半周总结—11月3日
- ACM训练半周总结—12月7日
- ACM训练半周总结—12月14日
- ACM训练周中总结—10月12日
- ACM训练周末总结—11月26日
- ACM训练周末总结—10月8日
- ACM训练周末总结—10月15日
- ACM训练周末总结—10月29日
- ACM-10月26驲周四周中训练心得
- ACM训练周末总结—9月3日
- ACM训练周末总结—11月5日
- ACM训练周末总结—11月12日
- ACM训练周末总结—11月19日
- CharSequence接口的实现类
- LinuxC编程
- 网站爬取
- yii2.0报的js冲突的错
- C语言:(新)四则计算器(支持括号和次方运算)
- ACM训练半周总结—10月26
- 内存泄漏
- [刷题]HDU3157
- TensorFlow 全连接网络实现
- CentOS 7搭建VPN虚拟局域网服务器
- Priority Queues
- 中介者模式学习和思考
- HTML插入图片存储路径问题
- C++中友元及继承