i=下一个确定的素数的位置; 这里要注意的是,由于在转换的过程中表中会产生一些值为0的元素,所以在计算下一个确 定的素数的位置时要跳过这些0 while(PrimeList[i]==0) 将图2-9中的程序模块“生成下一个素数”也编为一个函数: int NextPrime Number (int p, int PrimeList[) 其参数为当前的素数p,返回值为素数表 Primelist中的下一个素数。求下一个素数的方法很 简单:从 Primelist[p+1开始向后找到的第一个非0元素,即为所要求的素数 综合以上分析结果和例2-1中的结构化程序框图,就可以编写程序了 程序 ∥/ Example2-2:"验证"哥德巴赫猜想 #include < iostream. h> #define m 10001 /定义验证范围 /函数 Creat Primelist0:生成素数表 void CreatPrimeList(int PrimeListO) /将 Primelist的各元素设置为从2开始的正整数 for (i=0: i<M: i i+1) PrimeList[i=i //分别从表中去掉已经确定的各素数的倍数(将其置为 le(i<M/2) for (j=i+l: j<M: j=j+1) if(PrimeList[j]=0 & PrimeList [j]%PrimeList[i]==O) PrimeList [j] =0 ∥/确定下一个素数的位置第 2 单元 控制结构 - 26 - PrimeList[j] = 0; i = 下一个确定的素数的位置; } 这里要注意的是, 由于在转换的过程中表中会产生一些值为 0 的元素,所以在计算下一个确 定的素数的位置时要跳过这些 0: i = i+1; while(PrimeList[i]==0) i = i+1; 将图 2-9 中的程序模块“生成下一个素数”也编为一个函数: int NextPrimeNumber(int p, int PrimeList[]) { … ... } 其参数为当前的素数 p, 返回值为素数表 PrimeList 中的下一个素数。求下一个素数的方法很 简单: 从 PrimeList[p+1]开始向后找到的第一个非 0 元素, 即为所要求的素数。 综合以上分析结果和例 2-1 中的结构化程序框图, 就可以编写程序了: 程 序: // Example 2-2:"验证"哥德巴赫猜想 #include <iostream.h> #define M 10001 // 定义验证范围 // 函数 CreatPrimeList(): 生成素数表 void CreatPrimeList(int PrimeList[]) { int i, j; // 将 PrimeList 的各元素设置为从 2 开始的正整数 for(i=0; i<M; i = i+1) PrimeList[i] = i; // 分别从表中去掉已经确定的各素数的倍数(将其置为 0) i = 2; while(i<M/2) { for(j=i+1; j<M; j=j+1) if(PrimeList[j]!=0 && PrimeList[j]%PrimeList[i]==0) PrimeList[j] = 0; // 确定下一个素数的位置