HDU6983. Segment Tree with Pruning题解

HDU6983. Segment Tree with Pruning

题意:

有一个函数build(long long, long long)

Node* build(long long l, long long r) {
    Node* x = new(Node);
    if (r - l + 1 <= k) return x;
    long long mid = (l + r) / 2;
    x -> lchild = build(l, mid);
    x -> rchild = build(mid + 1, r);
    return x;
}

已知nk

问:运行Node* root = build(1, n);之后,以root为根节点的树存在多少个节点。

分析:

显然这是一颗不完整的线段树,线段树中区间长度相同的节点的子树拥有的节点数相同,故而可以设\(f(n)\)为区间长度为\(n\)的节点的子树拥有的节点数。

根据上面的递归函数,容易写出如下递推式

\[f(n)= \left\{ \begin{array}{ll} 2f(\frac{n}{2})+1&n>k\text{ 且 $n$ 为偶数},\\ f(\frac{n-1}{2})+f(\frac{n+1}{2})+1&n>k\text{ 且 $n$ 为奇数},\\ 1&n\leq k. \end{array} \right. \]

观察这个递推式可以发现,在计算\(f(n)\)​​的时候,如果不重复计算的话,最多只需要计算\(O(\log n)\)​量级的子问题,在线段树上的意义就是,最多只有\(O(\log n)\)​量级的节点的区间长度是互不相同的。

故而可以采用记忆化搜索,由于题目中\(n\)的范围是\(1\leq n \leq 10^{18}\)​,所以需要利用map进行记忆化搜索。

由于使用了map,所以时间复杂度为\(O(T\log n \log \log n)\)

代码:

#include <cstdio>
#include <map>
using namespace std;
typedef long long Lint;
map<Lint, Lint> M;
Lint n, k;
Lint cal(Lint n, Lint k) {
    if (n <= k) return 1;
    if (M.count(n)) return M[n];
    if (n % 2 == 0) return M[n] = cal(n / 2, k) * 2 + 1;
    return M[n] = cal((n - 1) / 2, k) + cal((n + 1) / 2, k) + 1;
}
void solve() {
    scanf("%lld%lld", &n, &k);
    M.clear();
    printf("%lld\n", cal(n, k));
}
int main() {
    int T;
    scanf("%d", &T);
    while (T--) solve();
    return 0;
}

正解到此结束

乱搞做法:

没想到记忆化搜索怎么办,那就暴力打表找规律推式子呗。

根据这个递推式,很容易写出普通递归

\[f(n)= \left\{ \begin{array}{ll} 2f(\frac{n}{2})+1&n>k\text{ 且 $n$ 为偶数},\\ f(\frac{n-1}{2})+f(\frac{n+1}{2})+1&n>k\text{ 且 $n$ 为奇数},\\ 1&n\leq k. \end{array} \right. \]

然后就可以进行轻松愉快的打表环节

#include <cstdio>
typedef long long Lint;
Lint n, k;
Lint cal(Lint n, Lint k) {
    if (n <= k) return 1;
    if (n % 2 == 0) return cal(n / 2, k) * 2 + 1;
    return cal((n - 1) / 2, k) + cal((n + 1) / 2, k) + 1;
}
void solve() {
    for (int n = 1; n <= 100; n++) {
        for (int k = 1; k <= n; k++) printf("%lld\t", cal(n, k));
        puts("");
    }
}
int main() {
    freopen("table.txt", "w", stdout);
    solve();
    return 0;
}

打表结果:

1	
3	1	
5	3	1	
7	3	3	1	
9	5	3	3	1	
11	7	3	3	3	1	
13	7	5	3	3	3	1	
15	7	7	3	3	3	3	1	
17	9	7	5	3	3	3	3	1	
19	11	7	7	3	3	3	3	3	1	
21	13	7	7	5	3	3	3	3	3	1	
23	15	7	7	7	3	3	3	3	3	3	1	
25	15	9	7	7	5	3	3	3	3	3	3	1	
27	15	11	7	7	7	3	3	3	3	3	3	3	1	
29	15	13	7	7	7	5	3	3	3	3	3	3	3	1	
31	15	15	7	7	7	7	3	3	3	3	3	3	3	3	1	
33	17	15	9	7	7	7	5	3	3	3	3	3	3	3	3	1	
35	19	15	11	7	7	7	7	3	3	3	3	3	3	3	3	3	1	
37	21	15	13	7	7	7	7	5	3	3	3	3	3	3	3	3	3	1	
39	23	15	15	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	1	
41	25	15	15	9	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	1	
43	27	15	15	11	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	1	
45	29	15	15	13	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	1	
47	31	15	15	15	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	1	
49	31	17	15	15	9	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	1	
51	31	19	15	15	11	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
53	31	21	15	15	13	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
55	31	23	15	15	15	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
57	31	25	15	15	15	9	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
59	31	27	15	15	15	11	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
61	31	29	15	15	15	13	7	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
63	31	31	15	15	15	15	7	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
65	33	31	17	15	15	15	9	7	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
67	35	31	19	15	15	15	11	7	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
69	37	31	21	15	15	15	13	7	7	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
71	39	31	23	15	15	15	15	7	7	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
73	41	31	25	15	15	15	15	9	7	7	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
75	43	31	27	15	15	15	15	11	7	7	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
77	45	31	29	15	15	15	15	13	7	7	7	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
79	47	31	31	15	15	15	15	15	7	7	7	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
81	49	31	31	17	15	15	15	15	9	7	7	7	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
83	51	31	31	19	15	15	15	15	11	7	7	7	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
85	53	31	31	21	15	15	15	15	13	7	7	7	7	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
87	55	31	31	23	15	15	15	15	15	7	7	7	7	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
89	57	31	31	25	15	15	15	15	15	9	7	7	7	7	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
91	59	31	31	27	15	15	15	15	15	11	7	7	7	7	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
93	61	31	31	29	15	15	15	15	15	13	7	7	7	7	7	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
95	63	31	31	31	15	15	15	15	15	15	7	7	7	7	7	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
97	63	33	31	31	17	15	15	15	15	15	9	7	7	7	7	7	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
99	63	35	31	31	19	15	15	15	15	15	11	7	7	7	7	7	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
101	63	37	31	31	21	15	15	15	15	15	13	7	7	7	7	7	7	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
103	63	39	31	31	23	15	15	15	15	15	15	7	7	7	7	7	7	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
105	63	41	31	31	25	15	15	15	15	15	15	9	7	7	7	7	7	7	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
107	63	43	31	31	27	15	15	15	15	15	15	11	7	7	7	7	7	7	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
109	63	45	31	31	29	15	15	15	15	15	15	13	7	7	7	7	7	7	7	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
111	63	47	31	31	31	15	15	15	15	15	15	15	7	7	7	7	7	7	7	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
113	63	49	31	31	31	17	15	15	15	15	15	15	9	7	7	7	7	7	7	7	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
115	63	51	31	31	31	19	15	15	15	15	15	15	11	7	7	7	7	7	7	7	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
117	63	53	31	31	31	21	15	15	15	15	15	15	13	7	7	7	7	7	7	7	7	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
119	63	55	31	31	31	23	15	15	15	15	15	15	15	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
121	63	57	31	31	31	25	15	15	15	15	15	15	15	9	7	7	7	7	7	7	7	7	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
123	63	59	31	31	31	27	15	15	15	15	15	15	15	11	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
125	63	61	31	31	31	29	15	15	15	15	15	15	15	13	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
127	63	63	31	31	31	31	15	15	15	15	15	15	15	15	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
129	65	63	33	31	31	31	17	15	15	15	15	15	15	15	9	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
131	67	63	35	31	31	31	19	15	15	15	15	15	15	15	11	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
133	69	63	37	31	31	31	21	15	15	15	15	15	15	15	13	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
135	71	63	39	31	31	31	23	15	15	15	15	15	15	15	15	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
137	73	63	41	31	31	31	25	15	15	15	15	15	15	15	15	9	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
139	75	63	43	31	31	31	27	15	15	15	15	15	15	15	15	11	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
141	77	63	45	31	31	31	29	15	15	15	15	15	15	15	15	13	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
143	79	63	47	31	31	31	31	15	15	15	15	15	15	15	15	15	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
145	81	63	49	31	31	31	31	17	15	15	15	15	15	15	15	15	9	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
147	83	63	51	31	31	31	31	19	15	15	15	15	15	15	15	15	11	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
149	85	63	53	31	31	31	31	21	15	15	15	15	15	15	15	15	13	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
151	87	63	55	31	31	31	31	23	15	15	15	15	15	15	15	15	15	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
153	89	63	57	31	31	31	31	25	15	15	15	15	15	15	15	15	15	9	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
155	91	63	59	31	31	31	31	27	15	15	15	15	15	15	15	15	15	11	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
157	93	63	61	31	31	31	31	29	15	15	15	15	15	15	15	15	15	13	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
159	95	63	63	31	31	31	31	31	15	15	15	15	15	15	15	15	15	15	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
161	97	63	63	33	31	31	31	31	17	15	15	15	15	15	15	15	15	15	9	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
163	99	63	63	35	31	31	31	31	19	15	15	15	15	15	15	15	15	15	11	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
165	101	63	63	37	31	31	31	31	21	15	15	15	15	15	15	15	15	15	13	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
167	103	63	63	39	31	31	31	31	23	15	15	15	15	15	15	15	15	15	15	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
169	105	63	63	41	31	31	31	31	25	15	15	15	15	15	15	15	15	15	15	9	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
171	107	63	63	43	31	31	31	31	27	15	15	15	15	15	15	15	15	15	15	11	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
173	109	63	63	45	31	31	31	31	29	15	15	15	15	15	15	15	15	15	15	13	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
175	111	63	63	47	31	31	31	31	31	15	15	15	15	15	15	15	15	15	15	15	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
177	113	63	63	49	31	31	31	31	31	17	15	15	15	15	15	15	15	15	15	15	9	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
179	115	63	63	51	31	31	31	31	31	19	15	15	15	15	15	15	15	15	15	15	11	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
181	117	63	63	53	31	31	31	31	31	21	15	15	15	15	15	15	15	15	15	15	13	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
183	119	63	63	55	31	31	31	31	31	23	15	15	15	15	15	15	15	15	15	15	15	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
185	121	63	63	57	31	31	31	31	31	25	15	15	15	15	15	15	15	15	15	15	15	9	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
187	123	63	63	59	31	31	31	31	31	27	15	15	15	15	15	15	15	15	15	15	15	11	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
189	125	63	63	61	31	31	31	31	31	29	15	15	15	15	15	15	15	15	15	15	15	13	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
191	127	63	63	63	31	31	31	31	31	31	15	15	15	15	15	15	15	15	15	15	15	15	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
193	127	65	63	63	33	31	31	31	31	31	17	15	15	15	15	15	15	15	15	15	15	15	9	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
195	127	67	63	63	35	31	31	31	31	31	19	15	15	15	15	15	15	15	15	15	15	15	11	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
197	127	69	63	63	37	31	31	31	31	31	21	15	15	15	15	15	15	15	15	15	15	15	13	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	5	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	
199	127	71	63	63	39	31	31	31	31	31	23	15	15	15	15	15	15	15	15	15	15	15	15	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	7	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	3	1	

发现都是奇数,1,3,5,7,9……似乎非常有规律,为了更方便找规律,我们将打表程序修改一下,让它输出结果加1再除以2,让它变成1,2,3,4,5……

打表结果变成

1	
2	1	
3	2	1	
4	2	2	1	
5	3	2	2	1	
6	4	2	2	2	1	
7	4	3	2	2	2	1	
8	4	4	2	2	2	2	1	
9	5	4	3	2	2	2	2	1	
10	6	4	4	2	2	2	2	2	1	
11	7	4	4	3	2	2	2	2	2	1	
12	8	4	4	4	2	2	2	2	2	2	1	
13	8	5	4	4	3	2	2	2	2	2	2	1	
14	8	6	4	4	4	2	2	2	2	2	2	2	1	
15	8	7	4	4	4	3	2	2	2	2	2	2	2	1	
16	8	8	4	4	4	4	2	2	2	2	2	2	2	2	1	
17	9	8	5	4	4	4	3	2	2	2	2	2	2	2	2	1	
18	10	8	6	4	4	4	4	2	2	2	2	2	2	2	2	2	1	
19	11	8	7	4	4	4	4	3	2	2	2	2	2	2	2	2	2	1	
20	12	8	8	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	1	
21	13	8	8	5	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	1	
22	14	8	8	6	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	1	
23	15	8	8	7	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	1	
24	16	8	8	8	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	1	
25	16	9	8	8	5	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	1	
26	16	10	8	8	6	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
27	16	11	8	8	7	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
28	16	12	8	8	8	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
29	16	13	8	8	8	5	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
30	16	14	8	8	8	6	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
31	16	15	8	8	8	7	4	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
32	16	16	8	8	8	8	4	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
33	17	16	9	8	8	8	5	4	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
34	18	16	10	8	8	8	6	4	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
35	19	16	11	8	8	8	7	4	4	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
36	20	16	12	8	8	8	8	4	4	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
37	21	16	13	8	8	8	8	5	4	4	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
38	22	16	14	8	8	8	8	6	4	4	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
39	23	16	15	8	8	8	8	7	4	4	4	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
40	24	16	16	8	8	8	8	8	4	4	4	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
41	25	16	16	9	8	8	8	8	5	4	4	4	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
42	26	16	16	10	8	8	8	8	6	4	4	4	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
43	27	16	16	11	8	8	8	8	7	4	4	4	4	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
44	28	16	16	12	8	8	8	8	8	4	4	4	4	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
45	29	16	16	13	8	8	8	8	8	5	4	4	4	4	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
46	30	16	16	14	8	8	8	8	8	6	4	4	4	4	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
47	31	16	16	15	8	8	8	8	8	7	4	4	4	4	4	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
48	32	16	16	16	8	8	8	8	8	8	4	4	4	4	4	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
49	32	17	16	16	9	8	8	8	8	8	5	4	4	4	4	4	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
50	32	18	16	16	10	8	8	8	8	8	6	4	4	4	4	4	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
51	32	19	16	16	11	8	8	8	8	8	7	4	4	4	4	4	4	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
52	32	20	16	16	12	8	8	8	8	8	8	4	4	4	4	4	4	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
53	32	21	16	16	13	8	8	8	8	8	8	5	4	4	4	4	4	4	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
54	32	22	16	16	14	8	8	8	8	8	8	6	4	4	4	4	4	4	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
55	32	23	16	16	15	8	8	8	8	8	8	7	4	4	4	4	4	4	4	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
56	32	24	16	16	16	8	8	8	8	8	8	8	4	4	4	4	4	4	4	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
57	32	25	16	16	16	9	8	8	8	8	8	8	5	4	4	4	4	4	4	4	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
58	32	26	16	16	16	10	8	8	8	8	8	8	6	4	4	4	4	4	4	4	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
59	32	27	16	16	16	11	8	8	8	8	8	8	7	4	4	4	4	4	4	4	4	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
60	32	28	16	16	16	12	8	8	8	8	8	8	8	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
61	32	29	16	16	16	13	8	8	8	8	8	8	8	5	4	4	4	4	4	4	4	4	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
62	32	30	16	16	16	14	8	8	8	8	8	8	8	6	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
63	32	31	16	16	16	15	8	8	8	8	8	8	8	7	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
64	32	32	16	16	16	16	8	8	8	8	8	8	8	8	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
65	33	32	17	16	16	16	9	8	8	8	8	8	8	8	5	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
66	34	32	18	16	16	16	10	8	8	8	8	8	8	8	6	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
67	35	32	19	16	16	16	11	8	8	8	8	8	8	8	7	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
68	36	32	20	16	16	16	12	8	8	8	8	8	8	8	8	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
69	37	32	21	16	16	16	13	8	8	8	8	8	8	8	8	5	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
70	38	32	22	16	16	16	14	8	8	8	8	8	8	8	8	6	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
71	39	32	23	16	16	16	15	8	8	8	8	8	8	8	8	7	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
72	40	32	24	16	16	16	16	8	8	8	8	8	8	8	8	8	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
73	41	32	25	16	16	16	16	9	8	8	8	8	8	8	8	8	5	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
74	42	32	26	16	16	16	16	10	8	8	8	8	8	8	8	8	6	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
75	43	32	27	16	16	16	16	11	8	8	8	8	8	8	8	8	7	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
76	44	32	28	16	16	16	16	12	8	8	8	8	8	8	8	8	8	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
77	45	32	29	16	16	16	16	13	8	8	8	8	8	8	8	8	8	5	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
78	46	32	30	16	16	16	16	14	8	8	8	8	8	8	8	8	8	6	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
79	47	32	31	16	16	16	16	15	8	8	8	8	8	8	8	8	8	7	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
80	48	32	32	16	16	16	16	16	8	8	8	8	8	8	8	8	8	8	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
81	49	32	32	17	16	16	16	16	9	8	8	8	8	8	8	8	8	8	5	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
82	50	32	32	18	16	16	16	16	10	8	8	8	8	8	8	8	8	8	6	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
83	51	32	32	19	16	16	16	16	11	8	8	8	8	8	8	8	8	8	7	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
84	52	32	32	20	16	16	16	16	12	8	8	8	8	8	8	8	8	8	8	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
85	53	32	32	21	16	16	16	16	13	8	8	8	8	8	8	8	8	8	8	5	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
86	54	32	32	22	16	16	16	16	14	8	8	8	8	8	8	8	8	8	8	6	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
87	55	32	32	23	16	16	16	16	15	8	8	8	8	8	8	8	8	8	8	7	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
88	56	32	32	24	16	16	16	16	16	8	8	8	8	8	8	8	8	8	8	8	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
89	57	32	32	25	16	16	16	16	16	9	8	8	8	8	8	8	8	8	8	8	5	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
90	58	32	32	26	16	16	16	16	16	10	8	8	8	8	8	8	8	8	8	8	6	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
91	59	32	32	27	16	16	16	16	16	11	8	8	8	8	8	8	8	8	8	8	7	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
92	60	32	32	28	16	16	16	16	16	12	8	8	8	8	8	8	8	8	8	8	8	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
93	61	32	32	29	16	16	16	16	16	13	8	8	8	8	8	8	8	8	8	8	8	5	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
94	62	32	32	30	16	16	16	16	16	14	8	8	8	8	8	8	8	8	8	8	8	6	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
95	63	32	32	31	16	16	16	16	16	15	8	8	8	8	8	8	8	8	8	8	8	7	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
96	64	32	32	32	16	16	16	16	16	16	8	8	8	8	8	8	8	8	8	8	8	8	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
97	64	33	32	32	17	16	16	16	16	16	9	8	8	8	8	8	8	8	8	8	8	8	5	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
98	64	34	32	32	18	16	16	16	16	16	10	8	8	8	8	8	8	8	8	8	8	8	6	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
99	64	35	32	32	19	16	16	16	16	16	11	8	8	8	8	8	8	8	8	8	8	8	7	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	3	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	
100	64	36	32	32	20	16	16	16	16	16	12	8	8	8	8	8	8	8	8	8	8	8	8	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	4	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	2	1	

仔细观察发现,对于2的幂次似乎每向右一列,个数就会以线性方式增加(尝试把字体缩小,会有一种显著的分层感,分界线感觉上是直线),对于非2的幂次在每向右一列个数都是1,没有增加。\(n=k\)时都是\(1\)。​

我们先研究2的幂次

第一列有1个2,第二列有2个2,第三列有3个2,第四列有4个2,...,第\(k\)列有\(k\)个2

第一列有1个4,第二列有3个4,第三列有5个4,第四列有7个4,...,第\(k\)列有\(2k-1\)个4

第一列有1个8,第二列有5个8,第三列有9个8,第四列有13个8,...,第\(k\)列有\(4k-3\)个8

第一列有1个16,第二列有9个16,第三列有17个16,第四列有25个16,...,第\(k\)列有\(8k-7\)​个16

...

总之,能够发现,第\(k\)列有\(2^{m-1}(k-1)+1\)\(2^m\)

观察每一列的相邻的2的幂次之间,例如2和4之间,4和8之间,都是以每向下一行+1的方式连接起来的。

容易计算\(2^{m}\)​​与\(2^{m+1}\)​​次方之间(两侧不包含)有\(2^{m}-1\)​​个数

将上面两个结果相加,我们可以计算出第\(k\)​列,在\([2^m,2^{m+1})\)​范围内的数有\((k+1)2^{m-1}\)​​个

先忽略掉\(1\)​的存在(即\(m=0\)的情况)

我们可以把\([2^m,2^{m+1})\)这个范围叫做第\(m\)块,

对前\(m\)块的个数求和可以得到,第\(k\)列在\((1,2^{m+1})\)范围内的数有\((k+1)(2^m-1)\)个,

所以前\(m-1\)​​块的个数求和,也即第\(k\)​​列在\((1,2^{m})\)​​范围内的数有\((k+1)(2^{m-1}-1)\)​​个

所以对于给定的\(n\)\(k\)我们可以求出它在哪一块里面。

不考虑每一列最上面的\(1\),第\(n\)行,对于第\(k\)列来说是第\(n-k\)个数。

我们只要找到使得\(n-k\)大于前\(m-1\)块的个数求和的最大的\(m\),那我们就找到\(n,k\)在哪一块里了

\[\begin{aligned} n-k&>(k+1)(2^{m-1}-1)\\ n-k&\geq(k+1)(2^{m-1}-1)+1\\ n&\geq(k+1)2^{m-1}\\ 2^{m-1}&\leq \frac{n}{k+1}\\ 2^{m-1}&\leq \left\lfloor\frac{n}{k+1}\right\rfloor\\ m-1&\leq\log_2\left\lfloor\frac{n}{k+1}\right\rfloor\\ m-1&\leq\left\lfloor\log_2\left\lfloor\frac{n}{k+1}\right\rfloor\right\rfloor\\ m&\leq\left\lfloor\log_2\left\lfloor\frac{n}{k+1}\right\rfloor\right\rfloor+1\\ \end{aligned} \]

所以\(n,k\)​应该在第\(k\)​列的第\(\left\lfloor\log_2\left\lfloor\frac{n}{k+1}\right\rfloor\right\rfloor+1\)​块里,不妨就记\(m=\left\lfloor\log_2\left\lfloor\frac{n}{k+1}\right\rfloor\right\rfloor+1\)

这一块里前\(2^{m-1}(k-1)+1\)个都是\(2^m\),后面\(2^m+1,2^m+2,...\)逐一递增。

换句话说,

\(n-k-(k+1)(2^{m-1}-1)>2^{m-1}(k-1)+1\)时,即\(n>2^m\cdot k\)​时

得到的数字是\(2^m+n-k-(k+1)(2^{m-1}-1)-(2^{m-1}(k-1)+1)\),即\(n-(k-1)2^m\)

否则得到的数字是\(2^m\)​。

别忘了将得到的数字乘以2再减1才是答案。

综上所述,答案为

\[g(n,k)= \left\{ \begin{array}{ll} 1&n=k=1,\\ 2n-(k-1)2^{m+1}-1&n>2^m\cdot k,\\ 2^{m+1}-1&\text{其它}. \end{array} \right.\\ \text{其中 }m=\left\lfloor\log_2\left\lfloor\frac{n}{k+1}\right\rfloor\right\rfloor+1 \]

乱搞代码:

#include <cstdio>
typedef long long Lint;
Lint log2(Lint n) {
    Lint m = 0;
    for (; n != 1; n >>= 1) m++;
    return m;
}
void solve() {
    Lint n, k;
    scanf("%lld%lld", &n, &k);
    if (n == k) {
        puts("1");
        return;
    }
    Lint m = log2(n / (k + 1)) + 1;
    if (n > (1LL << m) * k) {
        printf("%lld\n", 2 * n - (k - 1) * (1LL << (m + 1)) - 1);
    } else {
        printf("%lld\n", (1LL << (m + 1)) - 1);
    }
}
int main() {
    int T;
    scanf("%d", &T);
    while (T--) solve();
    return 0;
}
posted @ 2021-07-28 00:26  聆竹听风  阅读(95)  评论(0)    收藏  举报