T O N 的题解

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))

题目链接

这道题的推导还不会,我是将欧拉的前缀和列出来找的规律,等推导出再补上吧!!!

知识点:线性求解欧拉(欧拉筛的升级版,也可以用埃氏筛。埃氏筛省空间,复杂度比欧拉筛高一丢丢)
待续…

猜你喜欢

转载自blog.csdn.net/qq_45739057/article/details/104843391