下列给定的程序中 函数hn()的功能是:为一个偶数寻找两个素数 这两个素数之和等于该偶数 并将这两

计算机 素数,偶数,函数 已帮助 人

下列给定的程序中,函数hn()的功能是:为一个偶数寻找两个素数,这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主函数。

请改正函数fun()中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

include <stdio.h>

include <math.h>

void fun(int a, int *b, int *c)

{ int i,j,d,y;

for (i=3;i<=a/2;i=i+2)

/*************found**************/

{y=0;

for (j=2;j<=sqrt((double)i);j++)

if (i%j==0) y=0;

if (y==1)

/*************found**************/

{ d=i-a;

for (j-2;j<=sqrt((double)d);

j++)

if (d%j==0) y=0;

if (y=-1)

{*b=i; *c=d;}

}

}

}

main ()

{ int a,b,c;

do

{ printf(" Input a: ");

scanf ("%d", &a); }

while (a%2);

fun (a, &b, &c);

printf (" %d=%d+%d ", a,b,c);

}

请帮忙给出正确答案和分析,谢谢!

热搜:下面程序的功能是输出数组s中最大元素

答案解析

难度★★☆ 搜索
  • 正确答案:(1)错误:y=0; 正确:y=1: (2)错误:d=i-a; 正确:d=a-i;
    (1)错误:y=0; 正确:y=1: (2)错误:d=i-a; 正确:d=a-i; 解析:这道题是历年的考题经典。也就是验证哥德巴赫猜想之变体,原来的思路是(任意一个大于等于6的偶数都可以分解为两个素数之和)n为大于等于6的任一偶数,可分解为n1和n2两个数,分别检查n1和n2是否为素数,如都是,则为一组解。如n1不是素数,就不必再检查n2是否素数。先从n1=3开始,检验n1和n2(n2=N-n1)是否素数。然后使n1+2 再检验 n1,n2是否素数,…直到n1=n/2为止。该题思路是与“经典猜想”是相同的。