|
1+1=?
posted 2025-7-9 22:49
Last edited by 1+1=? 2025-7-9 23:58新代码如下
- (* -------------------------------
- 核心验证函数
- -------------------------------- *)
- verifyImprovedInequality[a_, b_, c_] :=
- Module[{s, area, r, R, A, B, C, xC, yC, D, E, F, DE, EF, FD, sum,
- upperBound, lowerBound, validTriangle},
- validTriangle = a + b > c && a + c > b && b + c > a;
- If[!validTriangle, Return[Nothing]];
- s = (a + b + c)/2;
- area = Sqrt[s (s - a) (s - b) (s - c)];
- If[area <= 0, Return[Nothing]];
- r = area/s;
- R = (a b c)/(4 area);
- A = {0, 0};
- B = {c, 0};
- xC = (b^2 + c^2 - a^2)/(2 c);
- yC = Sqrt[b^2 - xC^2];
- C = {xC, yC};
- D = (c C + b B)/(b + c);
- E = (a A + c C)/(a + c);
- F = (a A + b B)/(a + b); (* F 修正 *)
- DE = Norm[E - D];
- EF = Norm[E - F];
- FD = Norm[F - D];
- sum = DE/c + EF/a + FD/b;
- upperBound = (3 R + 6 r)/(3 R + 2 r);
- lowerBound = 1 + r/(2 R) + (2 r)/(2 r + 3 R);
- <|
- "Sides" -> {a, b, c},
- "SumRatio" -> N[sum, 8],
- "LowerBound" -> N[lowerBound, 8],
- "UpperBound" -> N[upperBound, 8],
- "Holds" -> (lowerBound <= sum <= upperBound)
- |>
- ];
- (* -------------------------------
- 合法三角形生成器
- -------------------------------- *)
- generateTriangleTriples[start_, stop_] :=
- Select[Flatten[
- Table[{a, b, c}, {a, start, stop}, {b, a, stop}, {c, b, stop}], 2],
- #[[1]] + #[[2]] > #[[3]] &];
- (* -------------------------------
- 批量并行验证 + 导出 CSV
- -------------------------------- *)
- runBatchedParallelCheck[start_, stop_, step_] :=
- Module[{results, filename, trueCount, falseCount, triangleTriples},
- LaunchKernels[]; (* 启动并行内核 *)
- Print["💻 Using ", $$KernelCount, " parallel kernels"];
- Do[
- Print["⏳ Checking a ∈ [", a, ", ", a + step - 1, "]..."];
- triangleTriples = generateTriangleTriples[a, a + step - 1];
- results = ParallelMap[
- verifyImprovedInequality @@ # &, triangleTriples
- ];
- results = DeleteCases[results, Nothing]; (* 必须过滤 *)
-
- filename = "results_parallel_a" <> ToString[a] <> "_to_" <>
- ToString[a + step - 1] <> ".csv";
- Export[filename, Normal /@ results]; (* 导出 association 为表 *)
- trueCount = Count[results, r_ /; r["Holds"] === True];
- falseCount = Count[results, r_ /; r["Holds"] === False];
- Print["✅ 成立组数: ", trueCount, " | ❌ 不成立组数: ", falseCount];
- ,
- {a, start, stop, step}
- ];
- CloseKernels[];
- Print["🎉 批处理完成。"]
- ];
- (* -------------------------------
- 启动主任务
- -------------------------------- *)
- runBatchedParallelCheck[3, 1000, 50];
Copy the Code
一共验证了410400组边长在3到1000以内的合法三角形,$1+ \dfrac{r}{2R} + \dfrac{2r}{2r+3R} \leqslant \dfrac{DE}{AB}+\dfrac{EF}{BC}+\dfrac{FD}{CA} \leqslant \dfrac{3R+6r}{3R+2r}$结果都是正确的
|
|