大家好,欢迎来到IT知识分享网。
(对新手友好,简单易于理解)
前言:
C++初学者遇到1e9时,可能会很好奇,这个表示什么意思?有什么用?遇到的一些问题为什么要这么处理?以下是个人的一些理解。
1.什么是1e9
通常来说这是计算机中一种科学计数法的表示形式:
1e9 = 110^9 = ;
例如:9e8 = 910^8 = ;
e表示10,e后面的数字表示次方,e的多少次方。
2.C++中的1e9
int num1 = 1e9; int num1 = 1e10; 输出的结果为: num1 = 1 000 000 000; num2 = 1 410 065 408;
3.C++中某个变量初始化赋值为1e9
int count = 1e9; res = min(res, count);
4.C++中表示正无穷与负无穷
正无穷:0x3f3f3f3f
负无穷:0xc0c0c0c0
int a=0x3f3f3f3f; int b=0xc0c0c0c0; 输出: a= b=-
5.mod 1e9+7
在一些算法题目中,会遇到这样的情况:
由于结果可能较大,将结果mod 1e9+7,即mod 。
或者( a * b ) % c = [ ( a % c ) * ( b % c ) ] % c 而这个c最常见的还是1e9+7。
有时候结果比较大的时候,会对结果进行mod 1e9+7操作。为什么呢?
第一:
1e9+7是一个很大的数,int32位的最大值为,所以对于int32位来说足够大。int64位的最大值为2^63-1,对于来说它的平方不会在int64中溢出所以在大数相乘的时候,因为(a∗b)%c=((a%c)∗(b%c))%c,所以相乘时两边都对取模,再保存在int64里面不会溢出 。有点于归一化的意思。
当一个问题只对答案的正确性有要求,而不在乎答案的数值,可能会需要将取值很大的数通过求余变小
第二:
其次,1e9+7是一个质数,在模素数p的情况下a*n(a非p的倍数)的循环节长为p,这是减少冲突的一个原因。另一方面模素数p的环是无零因子环,也就是说两个非p倍数的数相乘再模p不会是零(如果是0的话,在多个数连乘的情况下会大大增加冲突概率)。比如说如果所有的结果都是偶数…你模6就只可能出现0, 2, 4这三种情况…但模5还是可以出现2, 4, 1, 3这四(4=5-1)种情况的… hash表如果是用取模的方法也要模一个大质数来减少冲突,出题人也会这样来 希望减少你“蒙对“的概率。
如果这篇文章对你有用的话,请点击下方的一键三连,感谢感谢!
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/138178.html