2015-10-23 1 views
-4

Я хочу найти простые числа. Он делит n на все номера между 2 и (n–1), но это где-то не так. Например, 9, он дает true.найти простое число, используя цикл while в java

Цените любую помощь.

public void isPrime(int n) { 

    int i = 2; 
    while (i <= (n - 1)) { 
     if (n % i == 0) { 
      System.out.println("It's not a prime number"); 
      break; 
     } else { 
      System.out.println("It's a prime number"); 
      break; 
     } 
     i++; 
    } 
} 

ответ

0

Проблема в том, что вы выходите из цикла при первой проверке: вы делите на 2 и сообщаете ответ, основываясь только на этом.

Восстановите свою петлю так, чтобы решение «Это простое число» задерживается до тех пор, пока вы не пройдете весь цикл. Для этого вам может понадобиться логическая переменная.

Кроме того, я рекомендую использовать цикл for, так как вы знаете максимальное количество раз, которое вы будете повторять. Обратите внимание, что вам не нужно идти в n-1, только до sqrt (n).

2

Заявление i++ недостижимо, поэтому вы не хотите, чтобы else{...} содержал break. Вместо этого вы просто хотите else i++.

Если вы хотите, чтобы оператор «prime» был вне цикла, поскольку вы не знаете, что n является простым, пока цикл не завершит проверку всех делителей.

И вы не хотите break внутри if; вы хотите return, потому что иначе он будет печатать «просто».

P.S. Вы можете сделать сообщение while(i < Math.sqrt(n)), чтобы уменьшить итерации (подумайте об этом).

EDIT

Вы можете захотеть сделать тип возвращаемого boolean вместо печатных сообщений, помещая return false если есть делитель и return true, если не было делителем.

0

Этот метод возвращает логическое значение, если ваш номер является простым или нет. В цикле for вы можете видеть, что мы сначала проверяем 2. Если наш номер не делится на два, нам не нужно проверять четные числа. Это очень эффективный способ проверки простых чисел.

boolean isPrime(int n) { 
    for(int i=2;2*i<n;i++) { 
     if(n%i==0) 
      return false; 
    } 
    return true; 
} 
0
public void isPrime(int n) { 
    if(n % 2 == 0) { 
     System.out.println("It is not a prime number"); 
     return; 
    } 
    else { 
     int i = 3; 
     while(i <= Math.sqrt(n)) { 
      if((n % i) == 0) { 
       System.out.println("It is not a prime number"); 
       return; 
      } 
      i = i + 2; 
     } 
    } 
    System.out.println("It is a prime number"); 
    return; 

} 

Вы можете сделать то время цикла, таким образом, сначала вы хотите, чтобы проверить, если не делится на 2, если так это не простое число. Если не проверять нечетные nos до квадратного корня из n. Не нужно проверять даже, если нет, не делится на 2, он не будет делиться никаким четным числом.

0
//import java.util.*; 
import java.util.Scanner; 
class Primenos 
{ public static void main(String args[]) 
    { int no, flag = 0, a, b; 
     Scanner sc = new Scanner(System.in); 
     System.out.println("Enter any no: "); 
     no = sc.nextInt(); 
     a=1; 
     while(a<=no) 
     { 
      flag=0; 
      b=2; 
      while(b<=a>>1) 
      { 
       if(a%b==0) 
       { flag = 1; 
        break; 
       } 
       b++; 
      } 
      if(flag==0) 
      { System.out.println("Prime number" + a); 
      } 
      else 
      { System.out.println("Not Prime number" + a); 
      } 
      a++; 
     } 
    } 
} 
Смежные вопросы