SP6726 GOLDG - Goldbach graphs

题目描述

Christian Goldbach 在 1742 年给 Leonhard Euler 写信时,提出了一个知名的猜想: > 「所有大于 4 的偶数都可以表示为两个奇素数之和。」 为了验证给定偶数 $n$($n > 0$)的 Goldbach 猜想,我们定义出有向图 $G(n)$,即所谓的 $n$ 的 Goldbach 图。具体定义如下: - 节点:所有小于 $n$ 的素数 $p$,满足 $1 < p < n$。 - 对于每个节点 $p$,根据以下规则确定其出边: - 如果 $p + q = n$ 且 $q = 1$,则 $p$ 没有出边。 - 如果 $p + q = n$ 且 $q$ 的素因数分解为 $q = p_1 \cdot p_2 \cdot \dots \cdot p_k$(其中 $q > 1$),那么对每个 $i = 1, 2, \ldots, k$,在图中添加一条从 $p$ 到 $p_i$ 的有向边。注意每个 $p_i$ 必须是素数。此外,如果 $k = 1$,那么 $q$ 是素数,我们就找到了一个 Goldbach 猜想的解。 **例如:** - $G(2)$ 是空图(无节点) - $G(4)$ 包含两个节点和一条边。 节点 = $\{2, 3\}$ 边 = $\{2 \rightarrow 2\}$ - $G(6)$ 包含三个节点和三条边 节点 = $\{2, 3, 5\}$ 边 = $\{2 \rightarrow 2, 2 \rightarrow 2, 3 \rightarrow 3\}$ 需要注意的是,边 $2 \rightarrow 2$ 在 $G(6)$ 中出现了两次,因为当 $p = 2$ 时,$q = 4 = 2 \times 2$ Goldbach 猜想的解可以通过图 $G(n)$ 中的某些环来表示,具体有: - 单节点环(类型 I):某节点 $p$ 有且仅有一条出边 $p \rightarrow p$。 - 双节点环(类型 II):两个节点 $p_1$ 和 $p_2$ 互连,存在唯一的出边 $p_1 \rightarrow p_2$ 和 $p_2 \rightarrow p_1$。 你的任务是从给定节点 $x$ 开始,检查有向图 $G(n)$,以寻找从 $x$ 可到达的节点中符合 Goldbach 猜想的解。如果找到了属于类型 I 或类型 II 的环,需要报告从 $x$ 到环中某节点的最小距离。如果找不到这样的解,就应该声明未找到解。 需要注意的是,$G(n)$ 可能含有其他类型的环,避免算法进入死循环。

输入格式

输入由多行组成,每行都是一个不同的测试用例。每行包括一对数字,代表 $n$ 和 $x$。假设 $n$ 是偶数,并且 $2 \leq n \leq 1000$。虽然 $0 < x < n$ 成立,但不要假设 $x$ 是 $G(n)$ 中的有效节点。输入的最后一行是数字 0(这不是测试用例)。

输出格式

对于每个测试用例,输出以下三种情况之一: - 如果在距离 $x$ 的某距离处找到了解,输出:`Solution found at distance D.` - 如果无法到达解,输出:`Solution not reachable.` - 如果 $x$ 不是有效的节点,输出:`x is not a node!` 其中 $D$ 表示从 $x$ 到达解的最小距离。 **本翻译由 AI 自动生成**