长沙至石门的火车:怎么用C语言编程任何一个大于6的偶数都可以写成两个质数的和

来源:百度文库 编辑:中科新闻网 时间:2024/05/09 03:36:20
怎么用C语言编程任何一个大于6的偶数都可以写成两个质数的和
各位谢谢了
我将感激不尽啊

很简单的,下面的MAX我定义为10000以内,如果你觉的大,可以任意改动(别小于6了呵呵)

#define MAX 10000
#include "stdio.h"
#include "math.h"

int f(int m);
void main()
{int i,m,k=0;
for(m=6;m<=MAX ;m=m+2)
for(i=3;i<=m/2;i=i+2)
if(f(i)&&(f(m-i)) /*判断构成和的2个数是否都是素数*/
{printf("%d=%d+%d ",m,i,m-i);
k++;
if(k%5==0) printf("\n");
}
}

/*判断素数*/
int f(int m)
{int i,c;
c=sqrt(m);
for(i=2;i<=c;i++)
if(m%i==0)break;
if(i==c+1) return 1; /*找不到能除的数,是素数返回1*/
else return 0;
}

上面的解法没问题,但是题审错了

应该是如:

unsigned int c;
scanf("d%",&c);
isEven(c);//判断是否为偶 and >6

int a,b;
a+b=c?
a and b is 素数?
求a and b.

//回答楼的:
你考虑多了,如果那样,那么重点就偏移了.
如输入:34234234234234234234234234234,这个数(任意的)可以写成3*10N次方+4*10(N-1)次方...+4*1结果还是在处理的时候以一个数来处理,那么就是计算机还跟不上时代了

#define MAX 10000
#include "stdio.h"
#include "math.h"

int f(int m);
void main()
{int i,m,k=0;
for(m=6;m<=MAX ;m=m+2)
for(i=3;i<=m/2;i=i+2)
if(f(i)&&(f(m-i)) /*判断构成和的2个数是否都是素数*/
{printf("%d=%d+%d ",m,i,m-i);
k++;
if(k%5==0) printf("\n");
}
}

/*判断素数*/
int f(int m)
{int i,c;
c=sqrt(m);
for(i=2;i<=c;i++)
if(m%i==0)break;
if(i==c+1) return 1; /*找不到能除的数,是素数返回1*/
else return 0;
}

这个程序不错,不过我觉得有一点可以改进,就是“任何一个大于6的偶数”条件没能满足,因为计算机的一个单元的存储位置有限,你int 和 unsigned int都有限制,能不能考虑搞个任意长的数字呢?

高手啊!厉害!
你能教教我C语言吗??
我的QQ是:513568352
谢谢!