使用函数验证哥德巴赫猜想
本题要求实现一个判断素数的简单函数,并利用该函数验证哥德巴赫猜想:任何一个不小于6的偶数均可表示为两个奇素数之和。素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。
函数接口定义:
int prime( int p );
void Goldbach( int n );
其中函数prime当用户传入参数p为素数时返回1,否则返回0;函数Goldbach按照格式“n=p+q”输出n的素数分解,其中p≤q均为素数。又因为这样的分解不唯一(例如24可以分解为5+19,还可以分解为7+17),要求必须输出所有解中p最小的解。
思路:prime函数实现,求出素数可以通过开根号和取余来判断
int prime(int p)
{
if(p < 2)
return 0;
for(int i = 0; i <= sqrt(p); i++){
if(p % i == 0) //判断是否有其他因数
return 0;
}
return 1;
}
思路:Goldbach函数实现,可将一部分素数存入数组,在逐个比较减去最小素数是否还为素数,是的话则返回一次后break
void Goldbach(int n)
{
int nums[25]; //数组中存入素数
int count = 0; //计数及下标
for(int i = 0; i < 100; i++){ //100以内的素数
if(prmie(i) == 1){
nums[count] = i;
count++;
}
}
int num; //该数的另一个因数
for(int i = 0; i < count; i++){
num = n - nums[i]
if(prime(num) == 1){ //判断另一个因数是否为素数
printf("%d=%d+%d",n,nums[i],num);
break; //只需要打印一次
}
}
}