C判断素数的问题

来源:百度知道 编辑:UC知道 时间:2024/09/21 20:58:37
#include <stdio.h>
#include <math.h>
void main()
{
int n,i;
scanf("%d",&n);

for(i=2;i<=sqrt(n);i++)
if(n%i==0)
{
printf("%d不是素数\n",n);
break;
}

if(i>sqrt(n))
printf("%d是素数\n",n);

可是我不懂, if(n%i==0) 得到的是非素数 我懂
哪么下面按理说 直接 if(n%i!=0) 应该就可以得到素数啦 (也就是else)

但是结果就不是~为什么 呢 ?
为什么要写 if(i>sqrt(n))
printf("%d是素数\n",n)
才可以呢?

假设以n=9为例,i=2时,9%2!=0,按你说的话那么9就是素数了,显然不是。

如果i小于sqrt(n)的话,就说明执行过break; 这句。所以要有if(i>sqrt(n)) 这句来判断
如果没有这个判断,当你输入一个非素数的时候,这个程序会输出两句话:他不是一个素数;他是一个素数。

如果从键盘得到一个数,如9,当第一次进入循环,即i==2,则9%2!=0,但是9不是素数,所以用else是行不通的