大数快速求模算法需要求一个大数(譬如100位的数)模(%)另一个数的算法,最好给出c++算法.并不需要简单的除法运算法则

问题描述:

大数快速求模算法
需要求一个大数(譬如100位的数)模(%)另一个数的算法,最好给出c++算法.并不需要简单的除法运算法则来求余数.
对与三楼讲的模拟除法,我已经考虑了用数组来解决,试着做了一点,太烦,耗时间。我想是否有移位、辗转相除等类似欧几里德求模逆元方法的,基于数论的算法(思想)。
1个回答 分类:综合 2014-11-09

问题解答:

我来补答
楼上的全不明白楼主的意思,楼主要的是算法,不是程序你们懂吗!
我只能说你们不懂什么叫真正的算法,你们只是计算机的傀儡,我看了你们回答非常生气,高校教出来的就是这种“人才”,连算法都不懂.还不如我一高中生.严重BS楼上的,尤其是说java语言的那位.
我来告诉你
这个问题用递推解决
首先要你承认一个公式,我是习惯pascal语言的,c++怕写错,反正只是算法,你忍一下.
不知道你要的算法是大整数对long取余还是大整数对大整数取余.
先说对long取余,这个简单
先承认两个公式:ab mod c=((a mod c)(b mod c)) mod c
(a+b) mod c=(a mod c+b mod c) mod c
然后递推,先算1 mod c,然后10 mod c ,100 mod c.用数组存一下,递推方法是10^n mod c=((10^(n-1) mod c)*10) mod c
再加,让k=0,
for a:=1 to l do
k:=(k+num[a]*exp10[a]) mod c
这样最后k就是结果.
补充:我不知道你说哪里耗时间,这个算法是位数的一次函数.
再说大整数对大整数取余,这个需要模仿你平常做的除法来做高精度除法,说明白了就是模拟除法,这个没什么好说的,只要你编程能力足够就写得出来,你可以上网上搜一下,我这就不写了,因为我也不能保证一次写对,因为写一个高精度除法需要高精度加法和乘法,代码稍微有点繁.
不bs楼上的了,我错了.lrj当然认识,见过他很多回了.我不是你说的那种被动接受的人,我们学校没有人懂,全部都是自学的,看到了你说用java解决很生气而己,楼主的意思是算法.
至于oier,我们都很崇拜lrj,市面上基本没有什么适合初学者的书,资来源是网络.
像很多高校,教出来的学计算机系的“程序员”根本不懂算法,导致很多程序效率低下,比如我曾看到一个ip地址数据库这位“牛”用o(n)的算法扫描找对应的ip地址,然后改成其它方法了居然还很高兴地说现在10几次就可以确定了.再比如我们的“老师”,从学校计算机系毕业,来了什么也不懂,最垃圾的模拟都不会,背包都不知道是啥,所以我内心里对一些人排斥.对不起.
但是有一点我不认同,不是大多数的oier都像你说的那样.
还有,就是我很不喜欢你的明白楼主是什么意思却不去回答而用java塘塞过去.
那不是狂妄,那是失望.这种问题竟然要等到我一个高中生来回答,而上面竟然又有人用java搪塞,我对现在算法普及程序感到非常的失望,很伤心.
一楼我不明白的就是你怎么估计?相当于你说你去买份饭没说怎么做,相当模糊,楼主要的是具体的算法.
 
 
展开全文阅读
剩余:2000
上一页:周五
下一页:责任的事实论据