IMO 2021 第 1 题拓展问题的两个极值的编程求解

2023-05-13,,

IMO 2021 第 1 题拓展问题的两个极值的编程求解

本篇是 IMO 2021 第一题题解及相关拓展问题分析 的续篇。

拓展问题三:

(I). 求 n 的最小值,使得 n, n + 1, ..., 2n 中存在奇数环;

(II). 求 k 的最小值,使得当 n ≥ k 时,n, n + 1, ..., 2n 中存在奇数环。

SItem 结构定义

 1 #include <stdio.h>
2 #include <stdint.h>
3 #include <string>
4 #include <list>
5 #include <set>
6 #include <map>
7 #include <iostream>
8
9 typedef unsigned char u8;
10 struct SItem
11 {
12 int num;
13 u8 grp;
14 std::set<int> squares;
15
16 SItem() {}
17 SItem(int val, u8 group, int square) {
18 num = val; grp = group;
19 if (square != 0)
20 squares.insert(square);
21 }
22 };

check 函数实现

 1 bool check(int val)
2 {
3 int head = val;
4 int tail = val + val;
5 int hsum = tail + 1;
6 int tsum = tail + tail - 1;
7 std::map<int, int> mapSquare;
8 int idx = 2;
9 int square = idx * idx;
10 printf("For n=%d, square set:", head);
11 while (square <= tsum) {
12 if (square >= hsum) {
13 mapSquare[idx] = square;
14 printf(" %d", square);
15 }
16 ++idx;
17 square = idx * idx;
18 }
19 printf(".\n");
20 if (mapSquare.size() <= 2)
21 return true;
22 size_t squares = mapSquare.size();
23 std::map<int, int>::iterator itS = mapSquare.begin();
24 for (; squares >= 3; --squares, ++itS) {
25 if (itS->first % 2 == 1) {
26 int k = (itS->first + 1) / 2;
27 int a = k * 2 * (k - 2), b = k * k * 2 + 1, c = k * 2 * (k + 2);
28 if (a >= head && c <= tail) {
29 printf("a=%d, b=%d, c=%d.\n", a, b, c);
30 return false;
31 }
32 }
33 }
34 /// grouping
35 idx = head;
36 std::map<int, SItem> mapDone;
37 std::list<SItem> lstPending;
38 bool bFlict = false;
39 while (idx <= tail) {
40 if (lstPending.empty()) {
41 if (mapDone.find(idx) != mapDone.end()) {
42 ++idx;
43 continue;
44 }
45 SItem item(idx, 0, 0);
46 lstPending.push_back(item);
47 }
48 std::list<SItem>::iterator itHead = lstPending.begin();
49 for (auto it = mapSquare.begin(); it != mapSquare.end(); ++it) {
50 if (itHead->squares.find(it->second) != itHead->squares.end())
51 continue;
52 int oppo = it->second - itHead->num;
53 if (oppo == itHead->num)
54 continue;
55 if (oppo < head || oppo > tail)
56 continue;
57 std::map<int, SItem>::iterator itM = mapDone.find(oppo);
58 if (itM != mapDone.end()) {
59 if (itM->second.grp == 1 - itHead->grp)
60 continue;
61 printf("n=%d: %d must belong to both groups when dealing %d!\n", head, oppo, itHead->num);
62 bFlict = true;
63 break;
64 }
65 SItem item(oppo, 1 - itHead->grp, it->second);
66 lstPending.push_back(item);
67 itHead->squares.insert(it->second);
68 } // end of inner loop
69 if (bFlict) {
70 break;
71 }
72 mapDone[itHead->num] = *itHead;
73 lstPending.erase(itHead);
74 } // end of outer loop
75 printf("Grouping info for n=%d:\n", head);
76 for (auto it = mapDone.begin(); it != mapDone.end(); ++it)
77 printf(" %d[%d]", it->first, (int)it->second.grp);
78 printf(".\n");
79 if (!lstPending.empty()) {
80 printf("Pending info:\n");
81 for (auto it = lstPending.begin(); it != lstPending.end(); ++it)
82 printf(" %d[%d]", it->num, (int)it->grp);
83 printf(".\n");
84 }
85 return (!bFlict);
86 }

main 函数实现

 1 int main()
2 {
3 printf("The 1st number please: ");
4 std::string strInput;
5 getline(std::cin, strInput);
6 int raw = (int)strtoul(strInput.c_str(), 0, 10);
7 if (raw >= 100 || raw < 3) {
8 printf("\n The 1st number should be in [3,99].\n");
9 getline(std::cin, strInput);
10 return 0;
11 }
12 std::list<int> lstCan;
13 std::list<int> lstNot;
14 for (int idx = raw; idx < raw + 15 && idx <= 100; ++idx)
15 if (check(idx))
16 lstCan.push_back(idx);
17 else
18 lstNot.push_back(idx);
19 printf("\n");
20 if (!lstCan.empty()) {
21 printf("CAN-list:");
22 for (auto it = lstCan.begin(); it != lstCan.end(); ++it)
23 printf(" %d", *it);
24 printf(".\n");
25 }
26 if (!lstNot.empty()) {
27 printf("NOT-list:");
28 for (auto it = lstNot.begin(); it != lstNot.end(); ++it)
29 printf(" %d", *it);
30 printf(".\n");
31 }
32 getline(std::cin, strInput);
33 return 0;
34 }

n = 3 到 17 的运行结果分析

PS H:\Read\num\Release> .\grouping
The 1st number please: 3
For n=3, square set: 9.
For n=4, square set: 9.
For n=5, square set: 16.
For n=6, square set: 16.
For n=7, square set: 16 25.
For n=8, square set: 25.
For n=9, square set: 25.
For n=10, square set: 25 36.
For n=11, square set: 25 36.
For n=12, square set: 25 36.
For n=13, square set: 36 49.
For n=14, square set: 36 49.
For n=15, square set: 36 49.
For n=16, square set: 36 49.
For n=17, square set: 36 49 64.
Grouping info for n=17:
17[0] 18[0] 19[1] 20[0] 21[0] 22[0] 23[0] 24[0] 25[1] 26[1] 27[1] 28[1] 29[1]
30[0] 31[1] 32[1] 33[0] 34[1]. CAN-list: 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17.

n = 3 时,n, n+1, ..., 2n 中两数之和只有一个完全平方数,即 9,由前面分析,n, n+1, ..., 2n 可以分为两组,使得其中每组中两数之和均不是完全平方数。n = 4, ..., 16 时,有同样结论。

n = 17 时,n, n+1, ..., 2n 中两数之和有 3 个完全平方数,即 36, 49, 64,但 n, n+1, ..., 2n 还是可以分为两组,使得其中每组中两数之和均不是完全平方数,程序运行结果具体给出了一种分组方法,其中 [0] 表示 A 组,[1] 表示 B 组,如 17[0] 表示 17 在 A 组。

n = 3, 4, ..., 17 都是可分的情形(n, n+1, ..., 2n 可以分为两组,使得其中每组中两数之和均不是完全平方数),故有 CAN-list: 3 4 ... 17.

n = 18 到 32 的运行结果分析

PS H:\Read\num\Release> .\grouping
The 1st number please: 18
For n=18, square set: 49 64.
For n=19, square set: 49 64.
For n=20, square set: 49 64.
For n=21, square set: 49 64 81.
Grouping info for n=21:
21[0] 22[0] 23[1] 24[0] 25[1] 26[0] 27[1] 28[1] 29[0] 30[0] 31[0] 32[0]
33[1] 34[1] 35[1] 36[0] 37[0] 38[1] 39[0] 40[1] 41[0] 42[1].
For n=22, square set: 49 64 81.
Grouping info for n=22:
22[0] 23[1] 24[0] 25[1] 26[0] 27[1] 28[0] 29[0] 30[0] 31[0] 32[0] 33[1]
34[1] 35[1] 36[1] 37[0] 38[1] 39[0] 40[1] 41[0] 42[1] 43[0] 44[1].
For n=23, square set: 49 64 81.
Grouping info for n=23:
23[0] 24[1] 25[0] 26[1] 27[0] 28[0] 29[0] 30[0] 31[0] 32[0] 33[1] 34[1]
35[1] 36[1] 37[1] 38[0] 39[1] 40[0] 41[1] 42[0] 43[1] 44[0] 45[0] 46[0].
For n=24, square set: 49 64 81.
Grouping info for n=24:
24[0] 25[1] 26[0] 27[0] 28[0] 29[0] 30[0] 31[0] 32[0] 33[1] 34[1] 35[1]
36[1] 37[1] 38[1] 39[0] 40[1] 41[0] 42[1] 43[0] 44[0] 45[0] 46[0] 47[0]
48[0].
For n=25, square set: 64 81.
For n=26, square set: 64 81 100.
Grouping info for n=26:
26[0] 27[0] 28[0] 29[0] 30[0] 31[0] 32[1] 33[1] 34[1] 35[1] 36[1] 37[1]
38[1] 39[0] 40[0] 41[1] 42[1] 43[0] 44[0] 45[0] 46[0] 47[0] 48[0] 49[0]
50[1] 51[1] 52[1].
For n=27, square set: 64 81 100.
Grouping info for n=27:
27[0] 28[0] 29[0] 30[0] 31[0] 32[1] 33[1] 34[1] 35[1] 36[1] 37[1] 38[0]
39[0] 40[0] 41[1] 42[1] 43[1] 44[0] 45[0] 46[0] 47[0] 48[0] 49[0] 50[1]
51[1] 52[1] 53[1] 54[1].
For n=28, square set: 64 81 100.
Grouping info for n=28:
28[0] 29[0] 30[0] 31[0] 32[1] 33[1] 34[1] 35[1] 36[1] 37[0] 38[0] 39[0]
40[0] 41[1] 42[1] 43[1] 44[1] 45[0] 46[0] 47[0] 48[0] 49[0] 50[1] 51[1]
52[1] 53[1] 54[1] 55[1] 56[0].
For n=29, square set: 64 81 100.
Grouping info for n=29:
29[0] 30[0] 31[0] 32[1] 33[1] 34[1] 35[1] 36[0] 37[0] 38[0] 39[0] 40[0]
41[1] 42[1] 43[1] 44[1] 45[1] 46[0] 47[0] 48[0] 49[0] 50[1] 51[1] 52[1]
53[1] 54[1] 55[0] 56[0] 57[0] 58[0].
For n=30, square set: 64 81 100.
Grouping info for n=30:
30[0] 31[0] 32[1] 33[1] 34[1] 35[0] 36[0] 37[0] 38[0] 39[0] 40[0] 41[1]
42[1] 43[1] 44[1] 45[1] 46[1] 47[0] 48[0] 49[0] 50[1] 51[1] 52[1] 53[1]
54[0] 55[0] 56[0] 57[0] 58[0] 59[0] 60[1].
For n=31, square set: 64 81 100 121.
Grouping info for n=31:
31[0] 32[0] 33[1] 34[0] 35[0] 36[0] 37[0] 38[0] 39[1] 40[0] 41[1] 42[0]
43[1] 44[1] 45[1] 46[1] 47[1] 48[0] 49[1] 50[1] 51[0] 52[1] 53[0] 54[0]
55[0] 56[0] 57[0] 58[1] 59[0] 60[1] 61[0] 62[1].
For n=32, square set: 81 100 121.
Grouping info for n=32:
32[0] 33[0] 34[0] 35[0] 36[0] 37[1] 38[0] 39[1] 40[0] 41[1] 42[0] 43[1]
44[0] 45[1] 46[1] 47[1] 48[1] 49[1] 50[0] 51[0] 52[0] 53[0] 54[0] 55[0]
56[1] 57[0] 58[1] 59[0] 60[1] 61[0] 62[1] 63[0] 64[1]. CAN-list: 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32.

n = 18, 19, ..., 32 都是可分的情形。

n = 33 到 47 的运行结果分析

PS H:\Read\num\Release> .\grouping
The 1st number please: 33
For n=33, square set: 81 100 121.
Grouping info for n=33:
33[0] 34[0] 35[1] 36[0] 37[1] 38[0] 39[1] 40[0] 41[1] 42[0] 43[1] 44[0]
45[1] 46[0] 47[1] 48[1] 49[0] 50[0] 51[1] 52[0] 53[0] 54[1] 55[0] 56[1]
57[0] 58[1] 59[0] 60[1] 61[0] 62[1] 63[0] 64[1] 65[0] 66[1].
For n=34, square set: 81 100 121.
Grouping info for n=34:
34[0] 35[1] 36[0] 37[1] 38[0] 39[1] 40[0] 41[1] 42[0] 43[1] 44[0] 45[1]
46[0] 47[1] 48[0] 49[0] 50[0] 51[1] 52[1] 53[0] 54[1] 55[0] 56[1] 57[0]
58[1] 59[0] 60[1] 61[0] 62[1] 63[0] 64[1] 65[0] 66[1] 67[0] 68[1].
For n=35, square set: 81 100 121.
Grouping info for n=35:
35[0] 36[1] 37[0] 38[1] 39[0] 40[1] 41[0] 42[1] 43[0] 44[1] 45[0] 46[1]
47[0] 48[0] 49[0] 50[0] 51[1] 52[1] 53[1] 54[0] 55[1] 56[0] 57[1] 58[0]
59[1] 60[0] 61[1] 62[0] 63[1] 64[0] 65[1] 66[0] 67[1] 68[0] 69[0] 70[0].
For n=36, square set: 81 100 121.
Grouping info for n=36:
36[0] 37[1] 38[0] 39[1] 40[0] 41[1] 42[0] 43[1] 44[0] 45[1] 46[0] 47[0]
48[0] 49[0] 50[0] 51[1] 52[1] 53[1] 54[1] 55[0] 56[1] 57[0] 58[1] 59[0]
60[1] 61[0] 62[1] 63[0] 64[1] 65[0] 66[1] 67[0] 68[0] 69[0] 70[0] 71[1]
72[1].
For n=37, square set: 81 100 121 144.
Grouping info for n=37:
37[0] 38[1] 39[0] 40[1] 41[0] 42[1] 43[0] 44[1] 45[0] 46[0] 47[0] 48[0]
49[0] 50[1] 51[1] 52[1] 53[1] 54[1] 55[1] 56[0] 57[1] 58[0] 59[1] 60[0]
61[1] 62[0] 63[1] 64[0] 65[1] 66[0] 67[0] 68[0] 69[0] 70[0] 71[0] 72[1]
73[1] 74[1].
For n=38, square set: 81 100 121 144.
Grouping info for n=38:
38[0] 39[1] 40[0] 41[1] 42[0] 43[1] 44[0] 45[0] 46[0] 47[0] 48[0] 49[0]
50[1] 51[1] 52[1] 53[1] 54[1] 55[1] 56[1] 57[0] 58[1] 59[0] 60[1] 61[0]
62[1] 63[0] 64[1] 65[0] 66[0] 67[0] 68[0] 69[0] 70[0] 71[0] 72[1] 73[1]
74[1] 75[1] 76[1].
For n=39, square set: 81 100 121 144.
Grouping info for n=39:
39[0] 40[1] 41[0] 42[1] 43[0] 44[0] 45[0] 46[0] 47[0] 48[0] 49[0] 50[1]
51[1] 52[1] 53[1] 54[1] 55[1] 56[1] 57[1] 58[0] 59[1] 60[0] 61[1] 62[0]
63[1] 64[0] 65[0] 66[0] 67[0] 68[0] 69[0] 70[0] 71[0] 72[1] 73[1] 74[1]
75[1] 76[1] 77[1] 78[1].
For n=40, square set: 81 100 121 144.
Grouping info for n=40:
40[0] 41[1] 42[0] 43[1] 44[0] 45[1] 46[0] 47[1] 48[0] 49[1] 50[1] 51[0]
52[1] 53[0] 54[1] 55[0] 56[1] 57[0] 58[1] 59[0] 60[1] 61[0] 62[1] 63[0]
64[1] 65[0] 66[1] 67[0] 68[1] 69[0] 70[1] 71[0] 72[0] 73[1] 74[0] 75[1]
76[0] 77[1] 78[0] 79[1] 80[0].
For n=41, square set: 100 121 144.
Grouping info for n=41:
41[0] 42[0] 43[0] 44[0] 45[0] 46[0] 47[0] 48[0] 49[0] 50[1] 51[1] 52[1]
53[1] 54[1] 55[1] 56[1] 57[1] 58[1] 59[1] 60[0] 61[1] 62[0] 63[0] 64[0]
65[0] 66[0] 67[0] 68[0] 69[0] 70[0] 71[0] 72[1] 73[1] 74[1] 75[1] 76[1]
77[1] 78[1] 79[1] 80[1] 81[1] 82[1].
For n=42, square set: 100 121 144.
Grouping info for n=42:
42[0] 43[0] 44[0] 45[0] 46[0] 47[0] 48[0] 49[0] 50[1] 51[1] 52[1] 53[1]
54[1] 55[1] 56[1] 57[1] 58[1] 59[0] 60[0] 61[1] 62[1] 63[0] 64[0] 65[0]
66[0] 67[0] 68[0] 69[0] 70[0] 71[0] 72[1] 73[1] 74[1] 75[1] 76[1] 77[1]
78[1] 79[1] 80[1] 81[1] 82[0] 83[0] 84[1].
For n=43, square set: 100 121 144 169.
Grouping info for n=43:
43[0] 44[0] 45[0] 46[0] 47[0] 48[0] 49[0] 50[1] 51[1] 52[1] 53[1] 54[1]
55[1] 56[1] 57[1] 58[0] 59[1] 60[0] 61[1] 62[0] 63[1] 64[0] 65[0] 66[0]
67[0] 68[0] 69[0] 70[0] 71[0] 72[1] 73[1] 74[1] 75[1] 76[1] 77[1] 78[1]
79[1] 80[1] 81[0] 82[1] 83[0] 84[1] 85[0] 86[1].
For n=44, square set: 100 121 144 169.
Grouping info for n=44:
44[0] 45[0] 46[0] 47[0] 48[0] 49[0] 50[1] 51[1] 52[1] 53[1] 54[1] 55[1]
56[1] 57[0] 58[1] 59[0] 60[1] 61[0] 62[1] 63[0] 64[1] 65[0] 66[0] 67[0]
68[0] 69[0] 70[0] 71[0] 72[1] 73[1] 74[1] 75[1] 76[1] 77[1] 78[1] 79[1]
80[0] 81[1] 82[0] 83[1] 84[0] 85[1] 86[0] 87[1] 88[0].
For n=45, square set: 100 121 144 169.
Grouping info for n=45:
45[0] 46[1] 47[0] 48[1] 49[0] 50[0] 51[1] 52[0] 53[1] 54[0] 55[1] 56[0]
57[1] 58[0] 59[1] 60[0] 61[1] 62[0] 63[1] 64[0] 65[1] 66[0] 67[1] 68[0]
69[1] 70[0] 71[1] 72[1] 73[0] 74[1] 75[0] 76[1] 77[0] 78[1] 79[0] 80[1]
81[0] 82[1] 83[0] 84[1] 85[0] 86[1] 87[0] 88[1] 89[0] 90[1].
For n=46, square set: 100 121 144 169.
Grouping info for n=46:
46[0] 47[1] 48[0] 49[1] 50[1] 51[0] 52[1] 53[0] 54[1] 55[0] 56[1] 57[0]
58[1] 59[0] 60[1] 61[0] 62[1] 63[0] 64[1] 65[0] 66[1] 67[0] 68[1] 69[0]
70[1] 71[0] 72[0] 73[1] 74[0] 75[1] 76[0] 77[1] 78[0] 79[1] 80[0] 81[1]
82[0] 83[1] 84[0] 85[1] 86[0] 87[1] 88[0] 89[1] 90[0] 91[1] 92[0].
For n=47, square set: 100 121 144 169.
Grouping info for n=47:
47[0] 48[1] 49[0] 50[0] 51[1] 52[0] 53[1] 54[0] 55[1] 56[0] 57[1] 58[0]
59[1] 60[0] 61[1] 62[0] 63[1] 64[0] 65[1] 66[0] 67[1] 68[0] 69[1] 70[0]
71[1] 72[1] 73[0] 74[1] 75[0] 76[1] 77[0] 78[1] 79[0] 80[1] 81[0] 82[1]
83[0] 84[1] 85[0] 86[1] 87[0] 88[1] 89[0] 90[1] 91[0] 92[1] 93[0] 94[1]. CAN-list: 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47.

同样,n = 32, 33, ..., 47 都是可分的情形。

至此,拓展 3 的第 1 个问题的求解可知为 n = 48。

n = 48 到 62 的运行结果分析

PS H:\Read\num\Release> .\grouping
The 1st number please: 48
For n=48, square set: 100 121 144 169.
a=48, b=73, c=96.
For n=49, square set: 100 121 144 169.
n=49: 70 must belong to both groups when dealing 74!
Grouping info for n=49:
49[0] 51[1] 70[0] 72[1] 93[0] 95[1] 97[0].
Pending info:
74[0] 74[1] 76[1].
For n=50, square set: 121 144 169 196.
Grouping info for n=50:
50[0] 51[1] 52[0] 53[1] 54[0] 55[1] 56[0] 57[1] 58[0] 59[1] 60[0] 61[1]
62[0] 63[1] 64[0] 65[1] 66[0] 67[1] 68[0] 69[1] 70[0] 71[1] 72[1] 73[0]
74[1] 75[0] 76[1] 77[0] 78[1] 79[0] 80[1] 81[0] 82[1] 83[0] 84[1] 85[0]
86[1] 87[0] 88[1] 89[0] 90[1] 91[0] 92[1] 93[0] 94[1] 95[0] 96[1] 97[0]
98[0] 99[1] 100[0].
For n=51, square set: 121 144 169 196.
Grouping info for n=51:
51[0] 52[1] 53[0] 54[1] 55[0] 56[1] 57[0] 58[1] 59[0] 60[1] 61[0] 62[1]
63[0] 64[1] 65[0] 66[1] 67[0] 68[1] 69[0] 70[1] 71[0] 72[0] 73[1] 74[0]
75[1] 76[0] 77[1] 78[0] 79[1] 80[0] 81[1] 82[0] 83[1] 84[0] 85[1] 86[0]
87[1] 88[0] 89[1] 90[0] 91[1] 92[0] 93[1] 94[0] 95[1] 96[0] 97[1] 98[1]
99[0] 100[1] 101[0] 102[1].
For n=52, square set: 121 144 169 196.
Grouping info for n=52:
52[0] 53[1] 54[0] 55[1] 56[0] 57[1] 58[0] 59[1] 60[0] 61[1] 62[0] 63[1]
64[0] 65[1] 66[0] 67[1] 68[0] 69[1] 70[0] 71[1] 72[1] 73[0] 74[1] 75[0]
76[1] 77[0] 78[1] 79[0] 80[1] 81[0] 82[1] 83[0] 84[1] 85[0] 86[1] 87[0]
88[1] 89[0] 90[1] 91[0] 92[1] 93[0] 94[1] 95[0] 96[1] 97[0] 98[0] 99[1]
100[0] 101[1] 102[0] 103[1] 104[0].
For n=53, square set: 121 144 169 196.
Grouping info for n=53:
53[0] 54[1] 55[0] 56[1] 57[0] 58[1] 59[0] 60[1] 61[0] 62[1] 63[0] 64[1]
65[0] 66[1] 67[0] 68[1] 69[0] 70[1] 71[0] 72[0] 73[1] 74[0] 75[1] 76[0]
77[1] 78[0] 79[1] 80[0] 81[1] 82[0] 83[1] 84[0] 85[1] 86[0] 87[1] 88[0]
89[1] 90[0] 91[1] 92[0] 93[1] 94[0] 95[1] 96[0] 97[1] 98[1] 99[0] 100[1]
101[0] 102[1] 103[0] 104[1] 105[0] 106[1].
For n=54, square set: 121 144 169 196.
Grouping info for n=54:
54[0] 55[1] 56[0] 57[1] 58[0] 59[1] 60[0] 61[1] 62[0] 63[1] 64[0] 65[1]
66[0] 67[1] 68[0] 69[1] 70[0] 71[1] 72[1] 73[0] 74[1] 75[0] 76[1] 77[0]
78[1] 79[0] 80[1] 81[0] 82[1] 83[0] 84[1] 85[0] 86[1] 87[0] 88[1] 89[0]
90[1] 91[0] 92[1] 93[0] 94[1] 95[0] 96[1] 97[0] 98[0] 99[1] 100[0] 101[1]
102[0] 103[1] 104[0] 105[1] 106[0] 107[1] 108[0].
For n=55, square set: 121 144 169 196.
Grouping info for n=55:
55[0] 56[1] 57[0] 58[1] 59[0] 60[1] 61[0] 62[1] 63[0] 64[1] 65[0] 66[1]
67[0] 68[1] 69[0] 70[1] 71[0] 72[0] 73[1] 74[0] 75[1] 76[0] 77[1] 78[0]
79[1] 80[0] 81[1] 82[0] 83[1] 84[0] 85[1] 86[0] 87[1] 88[0] 89[1] 90[0]
91[1] 92[0] 93[1] 94[0] 95[1] 96[0] 97[1] 98[1] 99[0] 100[1] 101[0] 102[1]
103[0] 104[1] 105[0] 106[1] 107[0] 108[1] 109[0] 110[1].
For n=56, square set: 121 144 169 196.
Grouping info for n=56:
56[0] 57[1] 58[0] 59[1] 60[0] 61[1] 62[0] 63[1] 64[0] 65[1] 66[0] 67[1]
68[0] 69[1] 70[0] 71[1] 72[1] 73[0] 74[1] 75[0] 76[1] 77[0] 78[1] 79[0]
80[1] 81[0] 82[1] 83[0] 84[1] 85[0] 86[1] 87[0] 88[1] 89[0] 90[1] 91[0]
92[1] 93[0] 94[1] 95[0] 96[1] 97[0] 98[0] 99[1] 100[0] 101[1] 102[0] 103[1]
104[0] 105[1] 106[0] 107[1] 108[0] 109[1] 110[0] 111[1] 112[0].
For n=57, square set: 121 144 169 196 225.
Grouping info for n=57:
57[0] 58[1] 59[0] 60[1] 61[0] 62[1] 63[0] 64[1] 65[0] 66[1] 67[0] 68[1]
69[0] 70[1] 71[0] 72[0] 73[1] 74[0] 75[1] 76[0] 77[1] 78[0] 79[1] 80[0]
81[1] 82[0] 83[1] 84[0] 85[1] 86[0] 87[1] 88[0] 89[1] 90[0] 91[1] 92[0]
93[1] 94[0] 95[1] 96[0] 97[1] 98[1] 99[0] 100[1] 101[0] 102[1] 103[0] 104[1]
105[0] 106[1] 107[0] 108[1] 109[0] 110[1] 111[0] 112[1] 113[0] 114[1].
For n=58, square set: 121 144 169 196 225.
Grouping info for n=58:
58[0] 59[1] 60[0] 61[1] 62[0] 63[1] 64[0] 65[1] 66[0] 67[1] 68[0] 69[1]
70[0] 71[1] 72[1] 73[0] 74[1] 75[0] 76[1] 77[0] 78[1] 79[0] 80[1] 81[0]
82[1] 83[0] 84[1] 85[0] 86[1] 87[0] 88[1] 89[0] 90[1] 91[0] 92[1] 93[0]
94[1] 95[0] 96[1] 97[0] 98[0] 99[1] 100[0] 101[1] 102[0] 103[1] 104[0] 105[1]
106[0] 107[1] 108[0] 109[1] 110[0] 111[1] 112[0] 113[1] 114[0] 115[1] 116[0].
For n=59, square set: 121 144 169 196 225.
Grouping info for n=59:
59[0] 60[1] 61[0] 62[1] 63[0] 64[1] 65[0] 66[1] 67[0] 68[1] 69[0] 70[1]
71[0] 72[0] 73[1] 74[0] 75[1] 76[0] 77[1] 78[0] 79[1] 80[0] 81[1] 82[0]
83[1] 84[0] 85[1] 86[0] 87[1] 88[0] 89[1] 90[0] 91[1] 92[0] 93[1] 94[0]
95[1] 96[0] 97[1] 98[1] 99[0] 100[1] 101[0] 102[1] 103[0] 104[1] 105[0]
106[1] 107[0] 108[1] 109[0] 110[1] 111[0] 112[1] 113[0] 114[1] 115[0]
116[1] 117[0] 118[1].
For n=60, square set: 121 144 169 196 225.
Grouping info for n=60:
60[0] 61[1] 62[0] 63[1] 64[0] 65[1] 66[0] 67[1] 68[0] 69[1] 70[0] 71[1]
72[1] 73[0] 74[1] 75[0] 76[1] 77[0] 78[1] 79[0] 80[1] 81[0] 82[1] 83[0]
84[1] 85[0] 86[1] 87[0] 88[1] 89[0] 90[1] 91[0] 92[1] 93[0] 94[1] 95[0]
96[1] 97[0] 98[0] 99[1] 100[0] 101[1] 102[0] 103[1] 104[0] 105[1] 106[0]
107[1] 108[0] 109[1] 110[0] 111[1] 112[0] 113[1] 114[0] 115[1] 116[0] 117[1]
118[0] 119[1] 120[0].
For n=61, square set: 144 169 196 225.
Grouping info for n=61:
61[0] 62[1] 63[0] 64[1] 65[0] 66[1] 67[0] 68[1] 69[0] 70[1] 71[0] 72[0]
73[1] 74[0] 75[1] 76[0] 77[1] 78[0] 79[1] 80[0] 81[1] 82[0] 83[1] 84[0]
85[1] 86[0] 87[1] 88[0] 89[1] 90[0] 91[1] 92[0] 93[1] 94[0] 95[1] 96[0]
97[1] 98[1] 99[0] 100[1] 101[0] 102[1] 103[0] 104[1] 105[0] 106[1] 107[0]
108[1] 109[0] 110[1] 111[0] 112[1] 113[0] 114[1] 115[0] 116[1] 117[0] 118[1]
119[0] 120[1] 121[0] 122[1].
For n=62, square set: 144 169 196 225.
Grouping info for n=62:
62[0] 63[1] 64[0] 65[1] 66[0] 67[1] 68[0] 69[1] 70[0] 71[1] 72[1] 73[0]
74[1] 75[0] 76[1] 77[0] 78[1] 79[0] 80[1] 81[0] 82[1] 83[0] 84[1] 85[0]
86[1] 87[0] 88[1] 89[0] 90[1] 91[0] 92[1] 93[0] 94[1] 95[0] 96[1] 97[0]
98[0] 99[1] 100[0] 101[1] 102[0] 103[1] 104[0] 105[1] 106[0] 107[1] 108[0]
109[1] 110[0] 111[1] 112[0] 113[1] 114[0] 115[1] 116[0] 117[1] 118[0] 119[1]
120[0] 121[1] 122[0] 123[1] 124[0]. CAN-list: 50 51 52 53 54 55 56 57 58 59 60 61 62.
NOT-list: 48 49.

n = 48, 49 都是不可分的情形,这与上一篇的分析是相符的。n = 48 的情形存在 3 数环:48, 73, 96;而 n = 49 的情形,不存在 3 数环,但存在 5 数环:49, 51, 70, 74, 95。

n = 50, 51, ..., 62 都是可分的情形。

n = 63 到 77 的运行结果分析

PS H:\Read\num\Release> .\grouping
The 1st number please: 63
For n=63, square set: 144 169 196 225.
a=70, b=99, c=126.
For n=64, square set: 144 169 196 225.
a=70, b=99, c=126.
For n=65, square set: 144 169 196 225 256.
a=70, b=99, c=126.
For n=66, square set: 144 169 196 225 256.
a=70, b=99, c=126.
For n=67, square set: 144 169 196 225 256.
a=70, b=99, c=126.
For n=68, square set: 144 169 196 225 256.
a=70, b=99, c=126.
For n=69, square set: 144 169 196 225 256.
a=70, b=99, c=126.
For n=70, square set: 144 169 196 225 256.
a=70, b=99, c=126.
For n=71, square set: 144 169 196 225 256.
n=71: 96 must belong to both groups when dealing 100!
Grouping info for n=71:
71[0] 73[1] 96[0] 98[1] 123[0] 125[1] 127[0].
Pending info:
100[0] 131[0] 100[1] 129[1] 102[1] 133[1] 129[1].
For n=72, square set: 169 196 225 256.
Grouping info for n=72:
72[0] 73[1] 74[0] 75[1] 76[0] 77[1] 78[0] 79[1] 80[0] 81[1] 82[0] 83[1] 84[0]
85[1] 86[0] 87[1] 88[0] 89[1] 90[0] 91[1] 92[0] 93[1] 94[0] 95[1] 96[0] 97[1]
98[1] 99[0] 100[1] 101[0] 102[1] 103[0] 104[1] 105[0] 106[1] 107[0] 108[1] 109[0]
110[1] 111[0] 112[1] 113[0] 114[1] 115[0] 116[1] 117[0] 118[1] 119[0] 120[1] 121[0]
122[1] 123[0] 124[1] 125[0] 126[1] 127[0] 128[0] 129[1] 130[0] 131[1] 132[0] 133[1]
134[0] 135[1] 136[0] 137[1] 138[0] 139[1] 140[0] 141[1] 142[0] 143[1] 144[0].
For n=73, square set: 169 196 225 256 289.
Grouping info for n=73:
73[0] 74[1] 75[0] 76[1] 77[0] 78[1] 79[0] 80[1] 81[0] 82[1] 83[0] 84[1] 85[0]
86[1] 87[0] 88[1] 89[0] 90[1] 91[0] 92[1] 93[0] 94[1] 95[0] 96[1] 97[0] 98[0]
99[1] 100[0] 101[1] 102[0] 103[1] 104[0] 105[1] 106[0] 107[1] 108[0] 109[1] 110[0]
111[1] 112[0] 113[1] 114[0] 115[1] 116[0] 117[1] 118[0] 119[1] 120[0] 121[1] 122[0]
123[1] 124[0] 125[1] 126[0] 127[1] 128[1] 129[0] 130[1] 131[0] 132[1] 133[0] 134[1]
135[0] 136[1] 137[0] 138[1] 139[0] 140[1] 141[0] 142[1] 143[0] 144[1] 145[0] 146[1].
For n=74, square set: 169 196 225 256 289.
Grouping info for n=74:
74[0] 75[1] 76[0] 77[1] 78[0] 79[1] 80[0] 81[1] 82[0] 83[1] 84[0] 85[1] 86[0]
87[1] 88[0] 89[1] 90[0] 91[1] 92[0] 93[1] 94[0] 95[1] 96[0] 97[1] 98[1] 99[0]
100[1] 101[0] 102[1] 103[0] 104[1] 105[0] 106[1] 107[0] 108[1] 109[0] 110[1] 111[0]
112[1] 113[0] 114[1] 115[0] 116[1] 117[0] 118[1] 119[0] 120[1] 121[0] 122[1] 123[0]
124[1] 125[0] 126[1] 127[0] 128[0] 129[1] 130[0] 131[1] 132[0] 133[1] 134[0] 135[1]
136[0] 137[1] 138[0] 139[1] 140[0] 141[1] 142[0] 143[1] 144[0] 145[1] 146[0] 147[1]
148[0].
For n=75, square set: 169 196 225 256 289.
Grouping info for n=75:
75[0] 76[1] 77[0] 78[1] 79[0] 80[1] 81[0] 82[1] 83[0] 84[1] 85[0] 86[1] 87[0]
88[1] 89[0] 90[1] 91[0] 92[1] 93[0] 94[1] 95[0] 96[1] 97[0] 98[0] 99[1] 100[0]
101[1] 102[0] 103[1] 104[0] 105[1] 106[0] 107[1] 108[0] 109[1] 110[0] 111[1] 112[0]
113[1] 114[0] 115[1] 116[0] 117[1] 118[0] 119[1] 120[0] 121[1] 122[0] 123[1] 124[0]
125[1] 126[0] 127[1] 128[1] 129[0] 130[1] 131[0] 132[1] 133[0] 134[1] 135[0] 136[1]
137[0] 138[1] 139[0] 140[1] 141[0] 142[1] 143[0] 144[1] 145[0] 146[1] 147[0] 148[1]
149[0] 150[1].
For n=76, square set: 169 196 225 256 289.
Grouping info for n=76:
76[0] 77[1] 78[0] 79[1] 80[0] 81[1] 82[0] 83[1] 84[0] 85[1] 86[0] 87[1] 88[0]
89[1] 90[0] 91[1] 92[0] 93[1] 94[0] 95[1] 96[0] 97[1] 98[1] 99[0] 100[1] 101[0]
102[1] 103[0] 104[1] 105[0] 106[1] 107[0] 108[1] 109[0] 110[1] 111[0] 112[1] 113[0]
114[1] 115[0] 116[1] 117[0] 118[1] 119[0] 120[1] 121[0] 122[1] 123[0] 124[1] 125[0]
126[1] 127[0] 128[0] 129[1] 130[0] 131[1] 132[0] 133[1] 134[0] 135[1] 136[0] 137[1]
138[0] 139[1] 140[0] 141[1] 142[0] 143[1] 144[0] 145[1] 146[0] 147[1] 148[0] 149[1]
150[0] 151[1] 152[0].
For n=77, square set: 169 196 225 256 289.
Grouping info for n=77:
77[0] 78[1] 79[0] 80[1] 81[0] 82[1] 83[0] 84[1] 85[0] 86[1] 87[0] 88[1] 89[0] 90[1]
91[0] 92[1] 93[0] 94[1] 95[0] 96[1] 97[0] 98[0] 99[1] 100[0] 101[1] 102[0] 103[1]
104[0] 105[1] 106[0] 107[1] 108[0] 109[1] 110[0] 111[1] 112[0] 113[1] 114[0] 115[1]
116[0] 117[1] 118[0] 119[1] 120[0] 121[1] 122[0] 123[1] 124[0] 125[1] 126[0] 127[1]
128[1] 129[0] 130[1] 131[0] 132[1] 133[0] 134[1] 135[0] 136[1] 137[0] 138[1] 139[0]
140[1] 141[0] 142[1] 143[0] 144[1] 145[0] 146[1] 147[0] 148[1] 149[0] 150[1] 151[0]
152[1] 153[0] 154[1]. CAN-list: 72 73 74 75 76 77.
NOT-list: 63 64 65 66 67 68 69 70 71.

n = 63, 64, ..., 70 都是不可分的情形,都是存在 3 数环:70, 99, 126。而 n = 71 为不可分的情形,不存在 3 数环,但存在 5 数环:71, 73, 96, 100, 125。

n = 72, 73, ..., 77 都是可分的情形。

n = 78 到 92 的运行结果分析

PS H:\Read\num\Release> .\grouping
The 1st number please: 78
For n=78, square set: 169 196 225 256 289.
Grouping info for n=78:
78[0] 79[1] 80[0] 81[1] 82[0] 83[1] 84[0] 85[1] 86[0] 87[1] 88[0] 89[1] 90[0]
91[1] 92[0] 93[1] 94[0] 95[1] 96[0] 97[1] 98[1] 99[0] 100[1] 101[0] 102[1] 103[0]
104[1] 105[0] 106[1] 107[0] 108[1] 109[0] 110[1] 111[0] 112[1] 113[0] 114[1] 115[0]
116[1] 117[0] 118[1] 119[0] 120[1] 121[0] 122[1] 123[0] 124[1] 125[0] 126[1] 127[0]
128[0] 129[1] 130[0] 131[1] 132[0] 133[1] 134[0] 135[1] 136[0] 137[1] 138[0] 139[1]
140[0] 141[1] 142[0] 143[1] 144[0] 145[1] 146[0] 147[1] 148[0] 149[1] 150[0] 151[1]
152[0] 153[1] 154[0] 155[1] 156[0].
For n=79, square set: 169 196 225 256 289.
Grouping info for n=79:
79[0] 80[1] 81[0] 82[1] 83[0] 84[1] 85[0] 86[1] 87[0] 88[1] 89[0] 90[1] 91[0] 92[1]
93[0] 94[1] 95[0] 96[1] 97[0] 98[0] 99[1] 100[0] 101[1] 102[0] 103[1] 104[0] 105[1]
106[0] 107[1] 108[0] 109[1] 110[0] 111[1] 112[0] 113[1] 114[0] 115[1] 116[0] 117[1]
118[0] 119[1] 120[0] 121[1] 122[0] 123[1] 124[0] 125[1] 126[0] 127[1] 128[1] 129[0]
130[1] 131[0] 132[1] 133[0] 134[1] 135[0] 136[1] 137[0] 138[1] 139[0] 140[1] 141[0]
142[1] 143[0] 144[1] 145[0] 146[1] 147[0] 148[1] 149[0] 150[1] 151[0] 152[1] 153[0]
154[1] 155[0] 156[1] 157[0] 158[1].
For n=80, square set: 169 196 225 256 289.
a=96, b=129, c=160.
For n=81, square set: 169 196 225 256 289.
a=96, b=129, c=160.
For n=82, square set: 169 196 225 256 289 324.
a=96, b=129, c=160.
For n=83, square set: 169 196 225 256 289 324.
a=96, b=129, c=160.
For n=84, square set: 169 196 225 256 289 324.
a=96, b=129, c=160.
For n=85, square set: 196 225 256 289 324.
a=96, b=129, c=160.
For n=86, square set: 196 225 256 289 324.
a=96, b=129, c=160.
For n=87, square set: 196 225 256 289 324.
a=96, b=129, c=160.
For n=88, square set: 196 225 256 289 324.
a=96, b=129, c=160.
For n=89, square set: 196 225 256 289 324.
a=96, b=129, c=160.
For n=90, square set: 196 225 256 289 324.
a=96, b=129, c=160.
For n=91, square set: 196 225 256 289 324 361.
a=96, b=129, c=160.
For n=92, square set: 196 225 256 289 324 361.
a=96, b=129, c=160. CAN-list: 78 79.
NOT-list: 80 81 82 83 84 85 86 87 88 89 90 91 92.

n = 78, 79 还是可分的情形。n = 80, 81, ..., 92 则都是不可分的情形,且都有 3 数环:96, 129, 160。

n = 93 到 100 的运行结果分析

PS H:\Read\num\Release> .\grouping
The 1st number please: 93
For n=93, square set: 196 225 256 289 324 361.
a=96, b=129, c=160.
For n=94, square set: 196 225 256 289 324 361.
a=96, b=129, c=160.
For n=95, square set: 196 225 256 289 324 361.
a=96, b=129, c=160.
For n=96, square set: 196 225 256 289 324 361.
a=96, b=129, c=160.
For n=97, square set: 196 225 256 289 324 361.
n=97: 126 must belong to both groups when dealing 130!
Grouping info for n=97:
97[0] 99[1] 126[0] 128[1] 157[0] 159[1] 161[0] 190[0] 192[1].
Pending info:
130[0] 165[0] 132[0] 169[0] 130[1] 163[1] 132[1] 167[1] 134[1] 171[1] 163[1].
For n=98, square set: 225 256 289 324 361.
Grouping info for n=98:
98[0] 99[1] 100[0] 101[1] 102[0] 103[1] 104[0] 105[1] 106[0] 107[1] 108[0] 109[1]
110[0] 111[1] 112[0] 113[1] 114[0] 115[1] 116[0] 117[1] 118[0] 119[1] 120[0] 121[1]
122[0] 123[1] 124[0] 125[1] 126[0] 127[1] 128[1] 129[0] 130[1] 131[0] 132[1] 133[0]
134[1] 135[0] 136[1] 137[0] 138[1] 139[0] 140[1] 141[0] 142[1] 143[0] 144[1] 145[0]
146[1] 147[0] 148[1] 149[0] 150[1] 151[0] 152[1] 153[0] 154[1] 155[0] 156[1] 157[0]
158[1] 159[0] 160[1] 161[0] 162[0] 163[1] 164[0] 165[1] 166[0] 167[1] 168[0] 169[1]
170[0] 171[1] 172[0] 173[1] 174[0] 175[1] 176[0] 177[1] 178[0] 179[1] 180[0] 181[1]
182[0] 183[1] 184[0] 185[1] 186[0] 187[1] 188[0] 189[1] 190[0] 191[1] 192[0] 193[1]
194[0] 195[1] 196[0].
For n=99, square set: 225 256 289 324 361.
a=126, b=163, c=198.
For n=100, square set: 225 256 289 324 361.
a=126, b=163, c=198. CAN-list: 98.
NOT-list: 93 94 95 96 97 99 100.

n = 93, 94, ..., 96 是不可分的情形,且都有 3 数环:96, 129, 160。

n = 97 也是不可分的情形,没有 3 数环,但有 5 数环:97, 99, 126, 130, 159。

n = 98 是可分的情形。

n = 99, 100 是不可分的情形,且都有 3 数环:126, 163, 198。

至此,拓展三的第 2 问的答案明确了,是 k = 99。

IMO 2021 第 1 题拓展问题的两个极值的编程求解的相关教程结束。

《IMO 2021 第 1 题拓展问题的两个极值的编程求解.doc》

下载本文的Word格式文档,以方便收藏与打印。