为什么 我for是x从100的 输出才3个 不对哇

img


我三个编译器都试了 一个只输出一个值 我真的要谢了 小萌🆕心态自信心要没了 谢谢您们帮忙

这里 不能注释掉,每次判断一个数是不是素数,都需要重新初始化isPrime 标识为 1,不然 就会影响下一次的判断

img

给你参考一下吧,直接复制粘贴看一下现象吧

#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;
}