C语言程序:统计相邻素数差为2的数量 - 错误分析与修正
#include<stdio.h>\n#include<stdlib.h>\n\nint isPrime(int n)\n{\n if(n<=1)\n return 0;\n\n for(int i=2;i*i<=n;i++)\n {\n if(n%i==0)\n return 0;\n }\n\n return 1;\n\n}\n\nint main()\n{\n int n=0;int j=0;\n scanf("%d",&n);\n int *array=(int )malloc(nsizeof(int));\n for(int i=2;i<=n;i++)\n {\n if(isPrime(i))\n {\n \n array[j]=i;\n j++;\n }\n }\n\n int count=0;\n for(int k=0;k<j-1;k++)\n {\n if((array[k+1]-array[k])==2&&(array[k+1]-array[k])%2==0)\n {\n count++;\n }\n }\n\n printf("%d",count);\n free(array);\n\n}这个程序为什么数出0内容:这个程序数出0的原因是因为在计算相邻素数差为2的数量时,判断条件错误。在判断相邻素数差为2时,应该判断(array[k+1]-array[k])==2而不是(array[k+1]-array[k])==1。修正后的代码如下:\n\ncpp\n#include<stdio.h>\n#include<stdlib.h>\n\nint isPrime(int n)\n{\n if(n<=1)\n return 0;\n\n for(int i=2;i*i<=n;i++)\n {\n if(n%i==0)\n return 0;\n }\n\n return 1;\n\n}\n\nint main()\n{\n int n=0;int j=0;\n scanf("%d",&n);\n int *array=(int *)malloc(n*sizeof(int));\n for(int i=2;i<=n;i++)\n {\n if(isPrime(i))\n {\n array[j]=i;\n j++;\n }\n }\n\n int count=0;\n for(int k=0;k<j-1;k++)\n {\n if((array[k+1]-array[k])==2&&(array[k+1]-array[k])%2==0)\n {\n count++;\n }\n }\n\n printf("%d",count);\n free(array);\n\n}\n\n修正后的程序将正确地计算出相邻素数差为2的数量。
原文地址: https://www.cveoy.top/t/topic/p3rQ 著作权归作者所有。请勿转载和采集!