墨文和 发表于 2021-11-2 20:13:07

求助下各位大佬


{
    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:18:24

本帖最后由 傻眼貓咪 于 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:21:51

本帖最后由 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 是素数。

墨文和 发表于 2021-11-2 20:31:02

jackz007 发表于 2021-11-2 20:21
只有在确定 2 ~ num / 2 范围内所有的 i 都不能整除 num 才能确定 num 是素数。

那要怎么改呢?{:10_254:}

jackz007 发表于 2021-11-2 20:32:53

本帖最后由 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-3 11:22:50

傻眼貓咪 发表于 2021-11-2 20:18


谢谢了{:10_254:}爱你们哦

墨文和 发表于 2021-11-3 11:23:29

jackz007 发表于 2021-11-2 20:32


谢谢了{:10_254:}爱你们哦
页: [1]
查看完整版本: 求助下各位大佬