下列给定的程序中,函数hn()的功能是:为一个偶数寻找两个素数,这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主函数。 请改正函数fun()中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的

admin2010-09-14  29

问题 下列给定的程序中,函数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);
}

选项

答案(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为止。该题思路是与“经典猜想”是相同的。
转载请注明原文地址:https://jikaoti.com/ti/7IkiFFFM
0

随机试题
最新回复(0)