问题 填空题

下列给定的程序中,函数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("\nInput a: ");scanf ("%d", &a); } while (a%2); fun (a, &b, &c); printf ("\n\n%d=%d+%d\n", a,b,c);}

答案

参考答案:错误: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为止。该题思路是与“经典猜想”是相同的。

单项选择题
单项选择题 A1/A2型题