...编程解决哥德巴赫猜想,输入一个大于六的偶数,输出该偶数能分为几对...
发布网友
发布时间:2024-10-19 16:05
我来回答
共2个回答
热心网友
时间:2024-11-16 20:52
我来个完整的程序:
//哥德巴赫猜想:
//1.每个不小于6的偶数都是两个奇素数之和。(本程序要解决的问题)
//2.每个不小于9的奇数都是三个奇素数之和。
#include <stdio.h>
#include <conio.h>
#include <math.h>
int Prime(unsigned long u){ //判断u是否是素数,1是,0不是
unsigned long i,k;
k=(unsigned long)sqrt(u); //求u的开根号,作为判断素数整除数的上限
for(i=2;i<=k;++i){
if(u%i==0)return 0;//遇到能整除的,不是素数
}
return 1;
}
int main(){
unsigned long n,i,j,k;
printf("======Ge De Ba He Cai Xiang (1)======\n");
do{
printf("\nInput n(>=6): ");
scanf("%ld",&n);
if(n<6||n%2)break; //如果输入的数小于6,或为奇数,则退出
for(k=0,i=3;i<=n/2;i+=2){ //循环选择第一个加数(是奇数)
if(!Prime(i))continue; //如果i不是素数,换过下一个数
j=n-i;
if(!Prime(j))continue; //如果j不是素数,换过下一个数
printf("%lu : %lu + %lu\n",++k,i,j); //找到第k组解,输出
}
}while(1);
printf("\nFinished!\n");
getch();
return 0;
}
希望对你有帮助。
热心网友
时间:2024-11-16 20:49
逻辑不清晰,首先你先完成一个判断一个输入是否为质数的函数,如:
int IsPrime(int n);
然后在你的main函数中如下操作:
if(n<=6||n%2!=0)
printf("please reput a data");
else
for(a=1;a<=(n/2);a++)
{
if(IsPrime(a) && IsPrime(n-1))
i++;
}
printf("%d",i);
还有困难,请追问。