注册 登录
编程论坛 Linux教室

求大神解惑 为啥子我求的9这种平方数也是素数

joenejoe 发布于 2018-05-05 15:51, 2344 次点击
//给出一个大于等于三的数判断是不是素数
 #include"stdio.h"
 #include"stdio.h"
 int main()
 {
     int i,n,flag;
     printf("please enter a number:\n");
     scanf("%d",&n);
     for(i=2;i<=sqrt(n);i++)
      {
      if(n%i==0)
      flag=1;                                                                                                                                                                                                                                                      
      break;
     }
     if(flag)
      printf("%d不是素数\n",n);
      else
      printf("%d是素数\n",n);
      return 0;
}
2 回复
#2
md000000002018-09-15 18:47
if (  )
{

}
else
{

}

的缩写好像只有
if (  )
  //这里有一行
else
  //这里有一行
这一行不算在if里面
#3
gold6152018-11-14 21:10
你的代码明明是输出9不是素数,而3、5也不是素数,确切的说你的代码里边所有输入怕都不是素数,因为flag没有做初始化,变量声明时是不会默认给初始化的(好久不写c了我猜的),我改了的如下:

#include "stdio.h"
#include "math.h" //你的代码没有把math头文件引入进来
 int main()
 {
     int i,n,flag=0; //这里要把flag初始化为0,不然你不知道里边到底是多少
     printf("please enter a number:\n");
     scanf("%d",&n);
     double x = sqrt(n); //这里之所以要这样是因为在for循环中要不断判断,为了避免重复计算n的平方根,可以提前一次性计算好
     for(i=2;i<=x;i++)
      {
      if(n%i==0)
      {
         
      flag=1;     //这一部分要括起来,flag==1;break;是两句;你的代码中,循环只执行一次,不信你可以试试,而flag在未初始化的情况下大概率不会是0,因此下边一定输出是素数                                                                                                                                                                                                                                                  
      break;
      }
     }
     if(flag)
      printf("%dis not primer\n",n);
      else
      printf("%dis primer\n",n);
      return 0;
}
1