永发信息网

C语编程的问题

答案:2  悬赏:20  手机版
解决时间 2021-05-01 11:28
  • 提问者网友:火车头
  • 2021-04-30 18:53

我想要一个C语的程序,关于验证歌德巴赫猜想:

(1)任意一个大偶数都可以分解为两个素数之和。随机产生10个大于10的偶数进行验证,并对每个偶数输出分解结果。

(2)任意一个大奇数都可以分解为三个素数之和。随机产生10个大于10的奇数进行验证,并对每个奇数输出分解结果。能帮我一下么?

最佳答案
  • 五星知识达人网友:有你哪都是故乡
  • 2021-04-30 19:39

我有这个程序



#include <stdio.h>
#include <math.h>
int prime(int n) //判断素数.是返回1.不是返回0;
{
int i,k=sqrt(n);
for(i=2;i<=k;i++)
{
if(n%i==0)
break;
}
if(i>k) return 1;
else return 0;
}
void main()
{
int i,a,b,n; //n作为标志位.
for(i=6;i<=2000;i+=2) //因为判断偶数.所以i的步长为2.奇数不判断.
{
for(a=2;a<i;a++) //循环求组成该偶数的两个素数.
{
if(prime(a)) //先求出组成该偶数的第一个素数.
{
n=0; //对每个偶数的判断都将其初始化为0;
b=i-a; //第二个素数就等于该数减去第一个素数.
if(prime(b))
{
n=1; //d当该偶数的确是由两个素数组成,则将n置1;
break; //退出当前for(a)循环.
}
}
}
if(!n) //如果for(a)循环结束后,n的值还是0,说明该偶数不是由两个素数组成.
{
break; //就退出for(i)循环.
}


}
if(n) //根据n的值,判断验证是否正确.
printf("is right!\n");
else
printf("is error\n");
}

全部回答
  • 1楼网友:西风乍起
  • 2021-04-30 21:00

第一个:假设偶数是n,分解后的两个素数是i和n-i,在写程序的时候,可以循环增加i的值,从2开始,不断地进行判断i和n-i是否同时为素数,同时是,那么就退出循环,并记录i和n-i的值。

第二个:同样的道理,假设三个素数是i,j,n-i-j,这个需要用到两重循环,和上面一样,每取一个i和j就判断是否为素数,如果不是,则继续进行循环,三个都同时是了,再推出循环。

个人认为,这样不断地进行是否为素数的判断性能比较差,暂时还没想到更好的解决方法。

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯