/* * 2012.03.25 by PC Jiang */#include#include#include#include#include #define P_SIZE 100/*如果x可以写成两个素数的和,输出左右两个素数,并返回true*/bool is_Output(int *prime, //prime数组存储素数集合 int x, //任意大于2的偶数 int l_index, //左素数的游标 int &r_index); //右素数的游标 /*判断右素数r_prime是否是素数,如果是,存储到prime数组,并返回true*/bool is_Prime(int *prime, //prime数组存储素数集合 int r_prime, //右素数 int &r_index); //右素数所在prime数组游标,注意是引用int main() { int *prime=(int *)malloc(sizeof(int)*P_SIZE);//素数集合,1,3,5,7……; prime[0]=1; //前两个素数是1,3,暂时不考虑2 prime[1]=3; int l_index=1,r_index=1; //左素数和右素数所在prime数组的游标 int cur_index=1; //遍历prime数组的当前游标 int x; //任意大于2的偶数 bool ret_is_output; //is_output()的返回值 /*从4开始,判断偶数是否可以分成两个素数和,如果是,输出那两个素数*/ for(x=4;;x=x+2) { /*从当前游标开始向前遍历prime数组*/ for(l_index=cur_index;l_index>-1;--l_index) { /*如果x是素数,输出并开始判断下个偶数x*/ if(is_Output(prime,x,l_index,r_index)) break; } /*如果向前遍历完prime数组,不能判断偶数x*/ if(l_index==-1) { /*从遍历前的游标开始再向后遍历prime数组*/ for(l_index=++cur_index;prime[l_index] |