首页 > 试题广场 >

以下判断素数的代码在int表示的所有正数范围内是正确的么?为

[问答题]

以下判断素数的代码在int表示的所有正数范围内是正确的么?为什么?如何改进?

bool is_prime(int n) {

  assert(n >= 1);

  for (int i = 2; (i * i) <= n; i++)

    if (n % i == 0) return false;

  return true;

}

i * i 可能会超过 int 溢出变成负数。
i <= sqrt(n + 1) 好点
发表于 2021-03-11 19:20:28 回复(0)

// 1既不是质数也不是合数 返回false
bool is_prime(int n) {

  assert(n >= 1);

  if ( n == 1 )
      return false;
  for (int i = 2; (i * i) <= n; i++)

    if (n % i == 0) return false;

  return true;

}

发表于 2019-09-06 15:25:41 回复(0)
import java.util.*;
public class Main{
    public boolean is_prime(int num){
         //Scanner sc = new Scanner(System.in);
          //int num = sc.nextInt();
          boolean flag = true;
          for(int i=2;i<num;i++){
            if(num%i==0){
                flag = false;
                continue;                
            }
          }
          return flag;                   
    }

}

发表于 2019-07-02 14:11:57 回复(0)
不正确
1既不是素数也不是合数,素数从2开始
assert(n >= 1);改为assert(n > 1);

不知道对不对啊,欢迎评论!
发表于 2019-06-27 17:39:29 回复(1)