| 
 | 
 
 
发表于 2019-1-5 19:06:12
|
显示全部楼层
 
 
 
 本帖最后由 jackz007 于 2019-1-7 16:55 编辑  
 
    你判断素数的逻辑出了问题,看看你的代码: 
 
- for(j = 2 ; j < i ; j++) {
 
 -     if(i % j == 0) break ;
 
 -     xx[n] = i ;
 
 -     count ++  ;
 
 -     n ++      ;
 
 - }
 
  复制代码 
 
      当 i = 19 的时候,j = 2 , 3 , 4  ... 18 统统都不能被整除,而每次不能被整除都会判定 i 为素数而被记录一次,于是,函数执行过后,xx[]  中不止有 5 个 19,而是 17 个。 
 
      显然,是否素数只有在除完所有可能因子的时候才能最终做出判断,而不能只根据是否能被某一个数整除就下结论。 
 
      你的代码略作修改谨供参考,fun() 函数的功能保持不变,不同的是,这个程序可以打印出质*数*表中的前200个元素。当然,在 main() 函数中,只要让 m = 17,k = 5,就可以得到完全符合题目要求的结果。 
 
- #include <stdio.h>
 
 - #include <stdlib.h>
 
 - #include <string.h>
 
 - #include <math.h>
 
  
- void fun(const int m , const int k , int xx[])
 
 - {
 
 -     int d , i , j , n = 0       ;
 
 -     bool f                      ;
 
 -     i = m                       ;
 
 -     while (n < k) {
 
 -         i ++                    ;
 
 -         if (i > 1) {
 
 -             f = true            ;
 
 -             d = sqrt(i) + 1     ;
 
 -             for(j = 2 ; j < d ; j ++) {
 
 -                 if (! (i % j)) {
 
 -                     f = false   ;
 
 -                     break       ;
 
 -                 }
 
 -             }
 
 -             if (f) xx[n ++] = i ;
 
 -         }
 
 -     }
 
 - }
 
  
- int main(void)
 
 - {
 
 -     int i , k , m , xx[0x800]                         ;
 
 -     char s[0x80000]                                   ;
 
 -     m = 1                                             ;
 
 -     k = 200                                           ;
 
 -     if (m > 0 && k > 0) {
 
 -         fun(m , k , xx)                               ;
 
 -         s[0] = 0x00                                   ;
 
 -         for(i = 0 ; i < k ; i ++) {
 
 -             if (! (i % 5)) {
 
 -                 if (i) strcat(s , "\n")               ;
 
 -             } else {
 
 -                 strcat(s , " , ")                     ;
 
 -             }
 
 -             sprintf(& s[strlen(s)] , "%8d" , xx[i])   ;
 
 -         }
 
 -         strcat(s , "\n")                              ;
 
 -         printf("\n\n")                                ;
 
 -         printf("%s\n" , s)                            ;
 
 -         printf("\n\n")                                ;
 
 -     }
 
 - }
 
  复制代码 |   
 
 
 
 |