这个是个常规的杜教筛,按上次的做法交上去会T,原因在于用了map。。。
然后需要想办法不用map,手写hash是不可能手写的,所以去网上找解决姿势。。
一个比较好的姿势是在存和M(k)的时候可以考虑用a[n/k]这种方式存(其中n是题目要求的)
为什么可以这么存呢。。因为所有的k都是n除以一系列数得到的,而整除的顺序是对答案没有影响的,所以当把这些除数乘起来之后,枚举这些除数的积,就共有1..n这n种情况了。。
而通过预处理前m项和(m取为),可以将这n个数压成n/m个,即
个。。然后体验就比map好太多了。。
/**
* ┏┓ ┏┓
* ┏┛┗━━━━━━━┛┗━━━┓
* ┃ ┃
* ┃ ━ ┃
* ┃ > < ┃
* ┃ ┃
* ┃... ⌒ ... ┃
* ┃ ┃
* ┗━┓ ┏━┛
* ┃ ┃ Code is far away from bug with the animal protecting
* ┃ ┃ 神兽保佑,代码无bug
* ┃ ┃
* ┃ ┃
* ┃ ┃
* ┃ ┃
* ┃ ┗━━━┓
* ┃ ┣┓
* ┃ ┏┛
* ┗┓┓┏━━━━━━━━┳┓┏┛
* ┃┫┫ ┃┫┫
* ┗┻┛ ┗┻┛
*/
#include
#include
#include
#include
#include
#include
#include
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 6975 Solved: 1765
[Submit][Status][Discuss]
一共T+1行
第1行为数据组数T(T<=10)
第2~T+1行每行一个非负整数N,代表一组询问
一共T行,每行两个用空格分隔的数ans1,ans2
6
1
2
8
13
30
2333
1 1
2 0
22 -2
58 -3
278 -3
1655470 2
[Submit][Status][Discuss]