T题(T - C Looooops)
题目链接
这道题如果看懂题意,就是一个扩展欧几里得的模板题,看不懂就没什么办法咯!
一,题意:
- 对于 for(i = A ; i != B ;i += C) 循环语句,问在 k 位系统中循环几次会结束。(其实就是 i 在每次增加的时候对 2 ^ k 取模罢了,如果 i 能等于 B 则输出循环次数,否则输出死循环)
二,推导:
- 理解题意剩下的就是推导了
直接上图 (比较喜欢在注释里打草稿和推导公式)
N题(N - Help Hanzo)
题目链接
一,题意:
- 求区间[a,b]有多少个素数
首先观察一下数据范围
发现 a, b 还挺大,但 b - a 的范围很小,所以这就是一个区间筛的变形题。
二,实现过程:
-
先用欧拉筛打出 1e6 的素数(这里的打表是写在输入前的,千万不要写到循环里),再用这些素数去判断区间里的素数,由于这里可能重复判断一个数,所以要用 bool类型 的数组来记录这个数是否被筛过 (如果 a = 10, b = 20,这里的12 就会被2,3判断两次)
-
在求完后千万不能忘了一个特殊的数——1,所以要判断区间内是否存在 1,若存在,ans - 1,否则 ans 不变
三,注意:
- 这里是多组输入,注意 memset 的使用得当
四,提醒:
- 区间筛就是欧拉筛(或埃氏筛)和埃氏筛的结合,掌握欧拉筛和埃氏筛至关重要,不会的问度娘哦!!!
N题(O - GCD - Extreme (II))
这道题的推导还不会,我是将欧拉的前缀和列出来找的规律,等推导出再补上吧!!!
知识点:线性求解欧拉(欧拉筛的升级版,也可以用埃氏筛。埃氏筛省空间,复杂度比欧拉筛高一丢丢)
待续…