C语言2^365怎么取模?强制转换long会变成0

如题所述

365=5*73
73=36*2+1
故假令求余的数为m。且(2,m)=1;
2^365=x(mod m)

(2^5)^73=x(mod m)
(2^5 mod m)^73=x(mod m)
然后不断的拆指数,把左边的值降到整数表达范围以下之后(这个需要判断)求值。
2^365太大。
或者你也可以反过来。
代码思路: (这个可以无视m和2什么关系,及时相等都没问题)
n=1
for(i=1,i<366;i++)
{
n=2*n;
n=n%m;
}
反过来一步一步往上求,绝对不会超值,只要m的平方在最大整数范围以内,应该是能求出答案的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-30
最笨的办法.是自己定义能够存储和进行大数运算的数据结构和算法,用数组来存储大数.实现大数据的加减乘除运算.其实,实现加减运算应该就OK了.
然后再用这一系列的算法完成计算.
聪明点的办法.是从数学上看看该问题是否有合适的计算方法.然后用程序实现一遍.
相似回答