#include <stdio.h>
#include <math.h>
#define MAX 1000
int main(void)
{
int s=6;
int n=0;
int b[MAX+1];
int i;
int j;
int a[MAX+1]; // 为直观表示,各元素与下标对应,0号元素不用
for (i=1; i<=MAX; i++) // 数组各元素赋值
a[i]=i;
for (i=2; i<sqrt(MAX); i++) // 外循环使i作为除数
for (j=i+1; j<=MAX; j++) // 内循环检测除数i之后的数是否为i的倍数
{
if (a[i]!=0 && a[j]!=0) // 排除0值元素
if (a[j]%a[i]==0)
{
a[j]=0; // i后数若为i的倍数,刚将其置0(挖去)
n++;
}
}
//以上源代码来自http://blog.pfan.cn/wentao/22158.html
//以下为本人原创
for(i=1,j=3;j<=MAX;j++) //原数组转移至新数组,去掉0值元素
{
if(a[j]!=0)
{
b[i]=a[j];
i++;
}
}
/*
printf("%d\n",MAX-2-n);
for(i=1;i<=(MAX-2-n);i++)
{
printf("%5d",b[i]);
}
*/
//偶数分解为两个素数之和
for(i=1;s<=MAX;i++) //素数一
{
for(j=1;s<=MAX;j++) //素数二
{
if(b[i]+b[j]==s) //素数一加素数二
{
printf("%d=%d+%-5d\t",s,b[i],b[j]); //输出
s+=2; //下一个偶数
}
if(b[i]+b[j]>s)break; //如两素数之和大于偶数,则素数一++,素数二重新循环
}
if(b[i]>s) //如素数一大于偶数,素数一重新赋初值
i=1;
}
}
#include <stdio.h>
#include <math.h>
#define MAX 100000
int main(void)
{
int s=6;
int i;
int j;
int a[MAX+1]; // 为直观表示,各元素与下标对应,0号元素不用
for (i=1; i<=MAX; i++) // 数组各元素赋值
a[i]=i;
for (i=2; i<sqrt(MAX); i++) // 外循环使i作为除数
for (j=i+1; j<=MAX; j++) // 内循环检测除数i之后的数是否为i的倍数
{
if (a[i]!=0 && a[j]!=0) // 排除0值元素
if (a[j]%a[i]==0)
{
a[j]=0; // i后数若为i的倍数,刚将其置0(挖去)
}
}
a[1]=0;
for(i=3;s<=MAX;)
{
if(a[i]!=0)
{
if(a[s-a[i]]!=0)
{
j=s-a[i];
printf("%d=%d+%-5d\t",s,a[i],a[j]);
s+=2;
i=3;
}
}
//if(a[i]>s) i=3;
if(a[i]==0||a[s-a[i]]==0) i+=2;
}
}