首页 > TAG信息列表 > 某数
关于二分边界
关于二分边界 1. 终止条件 while (l < r) 2. mid取值 如果答案寄存在\(l\)上,则mid = (l + r + 1) >> 1,反之如果答案寄存在\(r\)上,则mid = (l + r) >> 1。 3. l, r取值 如果要求较小的答案,比如小于等于某数的最大值,就是将答案寄存在\(l\)上,以此为例此时 while (l < r) { int mid位运算常用操作
lowbit() 得到某个数的二进制最后一位1. 比如说某二进制为1010,lowbit输出为10,比如说某数为101000,那lowbit输出为1000. 具体实现是,x & (-x)即x & (~x + 1) 作用:可以得到x中1的数量,具体实现是把最右边的1去掉。 判断某数二进制表示的第k位是0还是1 使用右移再与1 x >> k & 1位运算
例题: 根据要求如果想让某数的第 i 位变成0,那么需要&上一个第 i 位为0的数,因为0/1 & 0都等于0,但是其他位需要不变,则其他位需要& 1,因为0&1=1,1&1=1,&上1不会发生变化 如果想让某数的第 i 位变为1,那么需要 | 上一个第 i 位为1的数,以为0/1 | 1都等于1,但是其他位需要不变,则其他位需斐波那契数列某数的序号-C语言
给定一个正整数,求得该数在斐波那契数列中的序号,若不存在,则返回-1 C代码: int main() { int fib1 = 0, fib2 = 1, i = 2; int target; scanf("%d", &target); while(fib2 <= target){ fib1 = fib1 + fib2; ++i;关于求解某数所有因子欧拉函数的复杂性分析
【命题】 对于给定数 \(n\) ,求解其所有因子的欧拉函数值 本文不讨论朴素做法,仅讨论两种较为常用的求解方法 【法一】 根据公式 \(\boldsymbol \varphi(n)=n\prod_{i=1}^m (1-{1\over p_i})\),其中 \(\displaystyle n=\prod_{i=1}^m p_i\) 对于 \(n\) 的每个因子 \(d\) ,暴力查询利用Set查找最大的比某数小的数
利用Set查找最大的比某数小的数 由于做到一个算法题需要快速的求出动态数组里面的比某数小的、最大的数,所以我在研究了Set的函数后,自己推敲出了这个用法。 Set里面有个函数是“lower_bound(key_value) ,返回第一个大于等于key_value的定位器”。 那么既然如此,我们返回的是第一