一·取模与模算术
我们知道,模算术有以下公式
1.我们发现,模算术公式中没有除法,事实上正是如此,因为取模本质上是取末尾数(低位),再进行运算。而除法是四则运算中唯一的运算顺序从高位到低位(厂字头竖式)的运算
2.我们发现,减法运算时,取模后被减数有可能小于减数导致结果变成负数,解决办法是在结果加上被模数再取一次模
3.负数取模合法,但是不可以模0
4.在C++中,取模符号%左右一般情况下左右必须是同一类型的数值,否则计算过程中会出错
5.取模对于一切实数数据类型都适用
6.运用模算术时,保险起见,每一步都取模(包括最后一步),经典例子是自定义函数内的运算及取模过程被判断语句跳过,数未参与计算,但是不能直接输出,必须取模
二·长整型运算
1.长整型范围:-2^63~2^63-1
2.长整型输入输出格式:Linux为 %lld ,Windows
平台中有时为 %I64d,稳妥的方法是使用C++输入输出流cincout
3.长整型包括整形,但整形不包括长整型(合法:int a; long long b; b+=a; && printf("%lld",a);反之不合法)
三·综合
1.取模符号两边不可以一个int一个long long(该错误极难发现)
2.模运算的类型必须与总表达的值类型一致
例:
int a,b,ans; long long m; ans=(a*b)%m; (错误)(1,2)
int ans; long long a,b,m; ans=(a*b)%m; (错误)(2)
int a,b; long long m,ans; ans=(a*b)%m; (错误)(1)
int a,b,m,ans; ans=(a*b)%m; (错误,中间结果可能溢出)(1)
可见,有时模算术与不同类型混杂时极容易出错,最好类型统一为long long
模算术基础:
传送门