请问这里为啥我输出的56是素数啊

img

==不是=号
if判断的时候是用if(isprime==1)

#include<math.h>
#include <cstdio>
int main()
{
  int n, i;
  int isPrime = 0;
  scanf("%d", &n);
  for(i = 2; i <= sqrt(n); ++i)
  {
      if(n % i == 0)
      {
          isPrime = 0;
          break;
      }
  }
  if (isPrime==1)
      printf("是");
  else
      printf("不是素数");
  return 0;
}
 

#include <iostream>
using namespace std;
 
int main()
{
  int n, i;
  bool isPrime = true;
 
  cout << "输入一个正整数: ";
  cin >> n;
 
  for(i = 2; i <= n / 2; ++i)
  {
      if(n % i == 0)
      {
          isPrime = false;
          break;
      }
  }
  if (isPrime)
      cout << "是素数";
  else
      cout << "不是素数";
 
  return 0;
}

这个例子看看吧

1.可以优化一下时间复杂度(小白也要有这种习惯,我也有):楼上那个时间复杂度还是高,因为他每次循环都要计算开平方sqrt(),但是你可以先计算sqrt()复制给n,如下:

  n=sqrt(n);
  for(i=2;i<=n;i++){
  }

或者每次 i 乘一下自己,也可以做到sqrt的作用,而且这样时间复杂度比sqrt要低,如下:

  for(i=2;i*i<=n;i++){
  }

2.下面那个判断isPrime是否为1,应该不是=,因为=是赋值的意思,当你的isPrime成为1时,计算机会将这个isPrime不为0(已经赋值为1)自动进入“是素数”这个判断中,不会进入“不是素数“这个判断,所以你要将if判断里的“isPrime=1”改为“isPrime==1”就可以了,同样也可以改为“isPrime”,原因是因为计算机会将原本不为0的变量进入if判断中,所以如下:

  if (isPrime)
      printf("是");
  else
      printf("不是素数");

就可以了
求采纳