求助下各位大佬
{
int num;
scanf("%d",&num);
if(isPrime(num)==0)
{
printf("这不是素数");
}
else
{
printf("这是素数");
}
}
isPrime(int num)
{
int mid;
mid=num/2;
int i;
for(i=2;i<num/2;i++)
{
if(num%i==0)
{
return 0;
}
else
{
return 1;
}
}
}
为什么我这个判断素数的程序,输入9也是显示它是素数{:10_266:} 本帖最后由 傻眼貓咪 于 2021-11-2 20:24 编辑
isPrime(int num)
{
int mid;
mid = num/2;
int i;
for(i = 2; i < num/2; i++)
{
if(num%i==0) return 0;
else return 1; // 你的代码 else 在 for() 里面,表示最多循环一次就结束,条件不是 if(num%i) == 0,就是 else
}
} 本帖最后由 jackz007 于 2021-11-2 20:26 编辑
isPrime(int num)
{
int mid ;
mid = num / 2 ;
int i ;
for(i = 2 ; i < num / 2 ; i ++) {
if(num % i == 0){
return 0 ;// 只要有一个 i 可以整除 num,num 就不是素数,这个判断是正确的。
} else {
return 1 ;// 只要有一个 i 不能整除 num,num 就是素数,这个判断是错误的。9 之所以被判定为素数,正是因为它不能被 2 整除!
}
}
}
只有在确定 2 ~ num / 2 范围内所有的 i 都不能整除 num 才能确定 num 是素数。 jackz007 发表于 2021-11-2 20:21
只有在确定 2 ~ num / 2 范围内所有的 i 都不能整除 num 才能确定 num 是素数。
那要怎么改呢?{:10_254:} 本帖最后由 jackz007 于 2021-11-2 20:36 编辑
墨文和 发表于 2021-11-2 20:31
那要怎么改呢?
int isPrime(int num)
{
int i , r = 0 ;
if(num > 1) {
for(r = 1 , i = 2 ; i * i <= num ; i ++) { // 循环前,r = 1,先假定 num 是素数
if(num % i == 0) {
r = 0 ; // 否定 r = 1 的假定
break ;
}
}
}
return r ;
} 傻眼貓咪 发表于 2021-11-2 20:18
谢谢了{:10_254:}爱你们哦 jackz007 发表于 2021-11-2 20:32
谢谢了{:10_254:}爱你们哦
页:
[1]