原因: 因为如果m能被 2 ~ m-1 之间任一整数整除,其二个因子必定有一个小于或等于,另一个大于或等于。例如16能被2,4,8整除,16=2*8,2小于4,8大于4,16=4*4,4=√16,因此只需判定在2~4之间有无因子即可。
#include <stdio.h> #include <math.h> int main() { int m; // 输入的整数 int i; // 循环次数 int k; // m 的平方根 printf("输入一个整数:"); scanf("%d",&m); // 求平方根,注意sqrt()的参数为 double 类型,这里要强制转换m的类型 k=(int)sqrt( (double)m ); for(i=2; i<=k; i++) if(m%i==0) break; // 如果完成所有循环,那么m为素数 // 注意最后一次循环,会执行i++,此时 i=k+1,所以有i>k if(i>k) printf("%d是素数。\n",m); else printf("%d不是素数。\n",m); return 0; }
/*#include <stdio.h> int main() { int a=0; // 素数的个数 int num=0; // 输入的整数 printf("输入一个整数:"); scanf("%d",&num); for(int i=2; i<num; i++) { if(num%i==0) { a++; // 素数个数加1 } } if(a==0) { printf("%d是素数。\n", num); } else { printf("%d不是素数。\n", num); } return 0; } */