图2-8中的框图是相当粗糙的,因为如何“验证x是否能被分解为两个素数之和”并不 清楚,因此继续对这个问题进行分解。“验证x是否能被分解为两个素数之和”的步骤可以 这样考虑:首先用x减去最小的素数2,然后看其差是否仍为素数,如果是,则验证结束,可 以打印出该偶数的分解表达式。否则,换一个更大的素数,再看x与这个素数的差是否为素 数。如果不是则仍进行循环,直到用于检测的素数已经大于x2而x与其差仍不是素数。这 时即可宣布一个伟大的发现:哥德巴赫猜想不成立!(?!) 图2-9给出了图2-8中的程序模块“验 证x是否能被分解为两个素数之和”的进 步分解。这里引入了一个新的变量p,用 于存放已经生成的素数。 图2-9中的模块“生成下一个素数” 还可以继续分解。实际上,在大多数程序 否 设计语言中,条件“x-p不是素数?”并不 能简单地写成一个表达式,也需要进一步 细化分解。在实际编程时,既可以将图2-9 直接代入图2-8,编成一个较大的程序,也 验证x是否能被分 解为两个素数之和 可以单独将图2-9中的程序模块编写为一 个函数,由主函数调用。一般来讲,一个程 序模块的大小最好不要超过一页打印纸1 +2 (约60行左右),这样程序的结构比较清 晰。如果程序模块太大则可以进一步分解 以上过程可以总结如下: 首先从题目本身开始,找出解决问题:L 的基本思路,并将其用结构化框图表示出 来。这个框图可能是非常粗糙的,仅仅是 一个算法的轮廓,但可以作为进一步分析图2-8验证哥德巴赫猜想的初步分解 x/2且xD不是常费、否 验证x是否能分解为 两个素数之和 生成下一个素数 不成立的情况 打印出X的分解情况 图2-9“验证x是否能分解为两个素数之和”的进一步分解第 2 单元 控制结构 - 21 - 图 2-8 中的框图是相当粗糙的,因为如何“验证 x 是否能被分解为两个素数之和”并不 清楚, 因此继续对这个问题进行分解。“验证 x 是否能被分解为两个素数之和”的步骤可以 这样考虑: 首先用 x 减去最小的素数 2, 然后看其差是否仍为素数, 如果是, 则验证结束, 可 以打印出该偶数的分解表达式。否则, 换一个更大的素数, 再看 x 与这个素数的差是否为素 数。如果不是则仍进行循环, 直到用于检测的素数已经大于 x/2 而 x 与其差仍不是素数。这 时即可宣布一个伟大的发现: 哥德巴赫猜想不成立!(?!) 图 2-9 给出了图 2-8 中的程序模块“验 证 x 是否能被分解为两个素数之和”的进 一步分解。这里引入了一个新的变量 p, 用 于存放已经生成的素数。 图 2-9 中的模块“生成下一个素数” 还可以继续分解。实际上, 在大多数程序 设计语言中,条件“x–p 不是素数?”并不 能简单地写成一个表达式, 也需要进一步 细化分解。在实际编程时, 既可以将图 2-9 直接代入图2-8, 编成一个较大的程序, 也 可以单独将图 2-9 中的程序模块编写为一 个函数, 由主函数调用。一般来讲, 一个程 序模块的大小最好不要超过一页打印纸 (约 60 行左右),这样程序的结构比较清 晰。如果程序模块太大则可以进一步分解。 以上过程可以总结如下: 首先从题目本身开始, 找出解决问题 的基本思路, 并将其用结构化框图表示出 来。这个框图可能是非常粗糙的, 仅仅是 一个算法的轮廓, 但可以作为进一步分析 x = 4 x < M 验证x 是否能被分 解为两个素数之和 图2-8 验证哥德巴赫猜想的初步分解 x = x+2 否 是 验证x是否能分解为 两个素数之和 p = 2 p<x/2且x-p不是常数 生成下一个素数 是 p>=x/2? 处理哥德巴赫猜想 不成立的情况 打印出X的分解情况 否 是 否 图2-9 “验证x是否能分解为两个素数之和”的进一步分解