即axmod( m ) == 1///x为a在mod m下的逆元
费马小定理 ///a^m-1 == 1( modm)
a * a^m-2 == 1( mod m ) ///m必须为素数 且a m 互质
函数lower_bound()在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置。如果所有元素都小于val,则返回last的位置
举例如下:(有序数组)
一个数组number序列为:4,10,11,30,69,70,96,100.设要插入数字3,9,111.pos为要插入的位置的下标
则
pos = lower_bound( number, number + 8, 3) - number,pos = 0.即number数组的下标为0的位置。
pos = lower_bound( number, number + 8, 9) - number, pos = 1,即number数组的下标为1的位置(即10所在的位置)。
pos = lower_bound( number, number + 8, 111) - number, pos = 8,即number数组的下标为8的位置(但下标上限为7,所以返回最后一个元素的下一个元素)。
所以,要记住:函数lower_bound()在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置。如果所有元素都小于val,则返回last的位置,且last的位置是越界的!!~
返回查找元素的第一个可安插位置,也就是“元素值>=查找值”的第一个元素的位置
upper-bound返回 大于插入值的第一个下标
再让我用通俗的语言讲一遍吧:lower-bound( x1, x2, x3)一共三个参数 ,x1为首地址 x2为末地址, x3为要查找的数值 但他是在左闭右开的区间查找, 所以如果有下标从0开始的一个数组 lower-bound( a, a+n, x3)才是在整个数组内查询 因为a为a[0]的地址 而a[n-1] 的地址为a+n-1 所以如果查询不到符合的数值 则应该返回数组最后的下标加1 已经越界了 在这里即返回n. 加入有数组1 2 3 4 5 6 7 下标从1开始
lower-bound( a+1 , a+1 + 7 , 8 )时返回8