2015-07-29 2 views
-2

Я хотел создать программу, которая отображает простое число, где индекс простого числа вводится пользователем. В основном будет отображаться n-е простое число, где n вводится пользователем. Однако программа не работает, и любая помощь будет принята с благодарностью. Код написан ниже, может ли кто-нибудь сказать мне, что с ним не так?Prime Number Программа не работает

import java.io.*; 
public class Nth_Prime 
{ 
    public static void main()throws Exception 
    { 
     BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); 
     System.out.println("Which Prime number would you like to find?"); 
     int n = Integer.parseInt(stdin.readLine()); 
     int k = 0; 
     int counter = 1; 
     int num=0; 

    for(int i=3;i<100;i++) 
    { 
     k=0; 
     for(int j=2;j<i;j++) 
     { 
      if(i%j!=0) 
      { 
       k++; 
      } 
     }  
     if(k!=0) 
     { 
      num=i; 
      counter++; 
     } 
     if(counter==n) 


      { 
       System.out.println("The number is: "+num); 
       break; 
      } 
     } 

    } 
} 
+2

Как программа не работает? – 9Deuce

+0

попробуйте мой ответ, это лучше в производительности –

ответ

0

Почему ваш код является неправильным (дает неправильный выход) :: Когда i является 25, ваш внутренний цикл будет увеличиваться kj = 2, 3, 7 ..., когда и после выхода из внутреннего for цикла, ваше if условия if(k!=0) проверки , поэтому для 25 ваш k должен находиться где-то около 22, поэтому вы считаете даже 25 как простое (что неправильно).

Попробуйте сделать это. Я заменил переменную k с boolean flag, который я предлагаю, чтобы false каждый раз i%j == 0, то есть, j делит i (с указанием i не является простым, и, следовательно, не должны учитываться).

for(int i=3;i<100;i++) 
{ 
    boolean flag = true; 
    for(int j=2;j<i;j++) 
    { 
     if(i%j==0) 
     { 
      flag = false; 
      break; 
     } 
    }  
    if(flag) 
    { 
     num=i; 
     counter++; 
    } 
    if(counter==n) 
    { 
      System.out.println("The number is: "+num); 
      break; 
    } 
} 

Несколько оптимизаций ::

1) Вы могли бы рассмотреть вопрос об изменении своего второго for цикла к for(int j=2;j<Math.sqrt(i);j++), так как для проверки состояния простое, вам не нужно проверить за sqrt(i), поскольку факторы повторяют после этого.

2) Вы должны использовать Sieve of Eratosthenes как более оптимальный способ поиска простых чисел.

2

я получил ошибку

import java.io.*; 
public class Nth_Prime 
{ 
    public static void main()throws Exception 
    { 
     BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); 
     System.out.println("Which Prime number would you like to find?"); 
     int n = Integer.parseInt(stdin.readLine()); 
     int k = 0; 
     int checker = 0; 
     int counter = 1; 
     int num=0; 

     for(int i=3;;i++) 
     { 
      k=0; 
      checker=0; 
      for(int j=2;j<i;j++) 
      { 
       if(i%j==0) 
       { 
        checker++; 
       } 
      }  

      if(checker==0) 
      { 
       k++; 
      } 
      if(k!=0) 
      { 
       num=i; 
       counter++; 
      } 
      if(counter==n) 
      { 
       System.out.println("The number is: "+num); 
       break; 
      } 
      else 
      { 
       continue; 
      } 
     } 

    } 
} 

Это работает, но спасибо за вашу помощь ребята

+3

Вы должны отредактировать свой ответ, чтобы объяснить (для других читателей), что вы изменили, и это заставило его работать. Вы также должны отметить свой ответ (или чужой, если он дал вам понимание, необходимое для решения вашей проблемы) в качестве решения. –

0

попробовать этот способ:

int num, count, i; 
     num=1; 
     count=0; 
     while (count < nth){ 

      num=num+1; //find the next prime number 
      for (i = 2; i <= num; i++){ 

       if (num % i == 0) { 

        break; //prime not found 
       } 
      } 
      if (i == num){ 

       count = count+1; //prime found 
      } 
     } 
System.out.println("The number is: "+num); 
2

Я предпочитаю, чтобы создать HashMap, содержащий индекс простого значения и основное значение, попробуйте это небольшое приложение:

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.util.HashMap; 

public class Nth_Prime { 

    static boolean checkPrime(int n) 
    { 
     for (int i=2;i<n;i++) 
     { 
      if(n%i==0) 
       return false; 
     } 
     return true; 
    } 
    static HashMap<Integer,Integer> map=new HashMap<Integer, Integer>(); 
    public static void main(String[] args) throws Exception { 
     BufferedReader stdin = new BufferedReader(new InputStreamReader(
       System.in)); 
     map.put(1, 2); 
     System.out.println("Which Prime number would you like to find?"); 
     while(true) 
     { 
      int n = Integer.parseInt(stdin.readLine()); 
      if(n<0) 
       return; 
      if(map.containsKey(n)) 
      { 
       System.out.println("The number is: " + map.get(n)); 

      } 
      else 
      { 
       int size=map.size(); 
       int lastKey=size;//(int) map.keySet().toArray()[size-1]; 
       int lastValue=map.get(lastKey); 
       for (int i = lastValue; i < 1000; i++) { 

        if(checkPrime(i)) 
        { 
         map.put(size, i); 
         size++; 
         if(map.containsKey(n)) 
         { 
          System.out.println("The number is: " + map.get(n)); 
          System.out.println("Which Prime number would you like to find?"); 
          break; 
         } 
        } 
       } 
      } 


     } 


    } 
} 
+0

Ваш код неверен. В вашем коде говорится, что третье простое число равно «4», а 6-е простое число «9» (явно не простые числа). Он также не отвечает на вопрос «Что не так с моим кодом» –