由“K尾相等数”引出来的k的m次方取余(大整数取余)&& 快速幂
来源:互联网 发布:java带薪实训靠谱吗 编辑:程序博客网 时间:2024/06/04 04:31
这几天真是愁死我了~~~唉!废话少说,先整理下思路吧:
先说一句“积的取余 = 取余的积的取余”,后面也许会用得到。
1.我的想法开始于两个数相乘取余。
27*45 % 7=1215%7=4。
27*45%7=(3 * 7+6)*45 %7=(3*7*45+6*45)% 7=[ 3*7*45+6*(6*7+3)] % 7=(3*7*45+6*6*7+6*3) % 7=
6*3%7=4
于是,有了下面的程序:
运行结果:
上面的结果:1.正确且用时也很短很短 2.正确,但用时大约37秒 3.结果不对,且用时37秒。
将上面的类型改成__int64,也不对,结果是错误的。
2.学长给了提示,看一下“快速幂”
快速幂,就是平方 平方 地拆开,如 2^100=(2^50)^2=((2^25)^2)^2=((2^24*2)^2)^2=(((2^12)^2*2)^2)^2=......一直到指数为1,((2^1)^2)......当然要注意一下指数的奇偶:
k ^ m mod c = (a ^ 2) ^ (b / 2) mod c(b为偶);
k ^ m mod c = ((a ^ 2) ^ (b / 2) * a) mod c(b为奇数)。
算法如下:
将上面程序改成取余的:
对于大数,结果不对。下面是学长的程序:
仔细分析下,我的原理跟他的差不多,以3,9,7,为例,我的是:
{[(3*3%7)*(3*3%7)%7]*[(3*3%7)*(3*3%7)%7]%7}%7*1*3%7
他的是把3换成了(3%7),数,比我的还小一些。但是,为什么,他的就可以算出结果,我的结果就不对呢?需注意一下:__int64 flag,类型!!!
结果正确,且运行时间很快。至于加不加“k%=m”,都无所谓了,能实现跟上面程序一样的功能。
- 由“K尾相等数”引出来的k的m次方取余(大整数取余)&& 快速幂
- 快速幂模板<n的m次方对mod取余>
- 由快速排序引出的第k大的数..
- js取整数,取余的方法
- PHP中大整数取余返回负数的问题
- 大整数除法(取模和取余)
- python(二) N的阶乘对M取余
- k进制正整数的对k-1取余与按位取余
- DP一个数k加上n次a而且乘上m次b,然后再对p取余最大
- A的B次方对C取余
- 取余运算||快速幂
- 取余运算||快速幂
- 取余的特点(+同余定理)
- 【数论】 通过逆元实现大整数除法的取余
- 大数的加减乘除取余
- 大数的取余运算
- 大数取余的加减乘除
- 探讨关于 整数除法 和 取余 的映射规律
- 响应优先级与zorder
- c++中BOOL和bool的区别
- Memcached Java Client API详解
- java存储过程
- FTP上传和下载文件--C++实现
- 由“K尾相等数”引出来的k的m次方取余(大整数取余)&& 快速幂
- Oracle 获取当前日期及日期格式
- 黑马程序员---.net 接口的作用
- Fiddler (五) Mac下使用Fiddler
- Linux学习笔记之--常用文件操作及目录管理命令
- 用java调用oracle存储过程总结
- JAVA绕过防采集网站
- java设计模式(三):command(命令模式)
- linux中关于shell ,gcc,make常用举例