这里 不能注释掉,每次判断一个数是不是素数,都需要重新初始化isPrime 标识为 1,不然 就会影响下一次的判断
给你参考一下吧,直接复制粘贴看一下现象吧
#include <stdio.h>
// 声明函数原型
int is_prime(int n);
int main() {
// 测试一些数是否是素数
int nums[] = {1, 2, 3, 4, 5, 6, 7, -1, -2, -3, -4, -5, -6, -7};
// 遍历数组中的每个数,调用函数并打印结果
for (int i = 0; i < sizeof(nums) / sizeof(nums[0]); i++) {
int n = nums[i];
printf("%d is %s prime.\n", n, is_prime(n) ? "" : "not");
}
// 测试1-100中有多少个素数
for(int x = 1; x <= 100; x++){
printf("%d is %s prime.\n", x, is_prime(x) ? "" : "not");
}
return 0;
}
// 判断一个整数是否是素数
// 如果是素数,返回1,否则返回0
int is_prime(int n) {
// 如果n小于等于1,直接返回0
if (n <= 1) {
return 0;
}
// 如果n等于2或3,直接返回1
if (n == 2 || n == 3) {
return 1;
}
// 如果n能被2或3整除,直接返回0
if (n % 2 == 0 || n % 3 == 0) {
return 0;
}
// 从5开始,每次增加2或4,检查是否能被n整除
// 只需要检查到sqrt(n)即可
int i = 5;
int w = 2;
while (i * i <= n) {
if (n % i == 0) {
return 0;
}
i += w;
w = 6 - w;
}
// 如果没有找到能整除n的数,返回1
return 1;
}