#include<stdio.h>
main()
{
long i,j,k,p_i,p_j,flag_i,flag_j;
scanf("%ld",&k);
for(i=2;i<k;i++) //产生第一个数字
{
for(j=2;j<k;j++) //产生第二个数字
{
flag_i=1;
for(p_i=2;p_i<i;p_i++) //判断第一个数字是否素数
if(i%p_i==0)
{
flag_i=0;
break;
}
if(flag_i==1) //若第一个数字为素数,进行判断第二数字是否素数
{
flag_j=0;
for(p_j=2;p_j<j;p_j++)
if(j%p_j==0)
{
flag_j=1;
}
if(flag_j==0&&j+i==k) //如果第二个数字也是素数,又第一个素数和第二个素数
{ // 之和为等于输入的数字k输出结果
printf("%ld = %ld + %ld",k,i,j);
return 1; //由于题目要求只输出第一个数字最小的结果,
} //当输出完第一次循环结果时结束循环,退出程序
}
}
}
}
分析:
先产生两个数字,再判断第一个数字是否素数,当第一个数字素数是在判断第二个数字是否素数,当第二个数字也是素数时
再判断这两个素数之和是否等于输入的数字,都满足时输出结果,由于题目要求只能输出第一个数字最小的结果所以输出第一次
循环结果后结束循环退出。