关于大数取模
来源:互联网 发布:三明治板的刚度矩阵 编辑:程序博客网 时间:2024/06/03 17:38
常常遇到的mod再大也只是1e9+7之类int范围内的数
然后在a*b%mod的时候只需要把a,b开成long long就避免了溢出问题
但是如果mod 是一个很大很大的数呢?(<2^63)
这样即使a,b全是long long型,在相乘的时候依旧会溢出
之前看大素数测定的时候看到一个方法:
a*b%c:
typedef long long ll;ll mult_mod (ll a,ll b, ll c) { a%=c,b%=c; ll ret = 0; ll tmp = a; while (b) { if (b&1) { ret += tmp; if (ret > c) ret -= c; } tmp<<=1; if (tmp>c) tmp-=c; b>>=1; } return ret; }
a^n%mod:
ll pow_mod(ll a,ll n,ll mod) { ll ret = 1; ll temp = a%mod; while (n) { if (n&1) ret = mult_mod(ret,temp,mod); temp = mult_mod(temp,temp,mod); n>>=1; } return ret; }
另外,对于用字符串表示的数字取模:
ll getr(string s,ll mod){ ll r = 0; for (int i = 0;i < s.size();++i) { r = (mul_mod(r,10,mod) + (ll)(s[i]-'0'))%n; } return r;}
上面这个在做一个题目中用过,数字会达到很大很大,而模不大:点击打开链接
还没有遇到模本身大到超出long long范围的,不过觉得应该不会出现
一般取模都是为了结果不超long long 如果模都超long long那还取什么模,直接就是高精度了。。。
0 0
- 关于大数取模
- 大数取模运算
- 大数取模
- 大数取模
- 大数取模 poj2635
- 大数取模模板
- 1086:大数取模
- hdu1212(大数取模)
- 大数取模
- java大数取模
- 大数取模
- 大数取模
- 大数取模运算
- 大数加减乘除取模
- 大数取模
- 大数取模
- 大数取模
- 大数取模
- 设计模式之装饰模式
- session如何加入mysql库
- 集合:高性能的容器类型之OrderedDict objects
- java堆外内存
- PHP之判断输入的字符串是不是回文
- 关于大数取模
- 1字节的UTF-8序列的字节1无效
- 设计模式——简单工厂 SimpleFactory
- Linux 服务器安装配置 TimeMachine
- linux中搜索文件
- string
- Codeforces 697B. Barnicle(模拟)
- APP开发实战87-属性动画
- 开发感悟