Пожалуйста, помогите ... моя реализация подсчета простых чисел в Java делает то, что должен делать? - PullRequest
1 голос
/ 28 ноября 2010

Мне дали описание того, как мне реализовать генератор простых чисел, используя Java;но я не уверен, что делаю это правильно.Я надеялся, что кто-нибудь может дать мне несколько общих советов о том, как улучшить мою реализацию!Пожалуйста, не дайте мне ответа, так как это домашнее задание, и я бы хотел взломать это сам / стать лучшим программистом / не обманывать!

Я опубликую описание и свое решение ниже, в основном, я просто хотел бы знать некоторые общие вещи - правильно ли я следовал инструкциям (наиболее важно, поскольку я нахожу язык немного запутанным), и если бы я могсделать мою программу лучше (если так, то некоторые общие советы были бы хорошими, чтобы я мог понять, как ... я думаю, что мое использование логарифма далеко, но я не могу найти лучший способ использовать его)!

Извините, если это не разрешено - если нет, пожалуйста, игнорируйте или удалите!Большое спасибо за Вашу помощь!:)

Описание:

Prime (int initialCapacity): Конструктор класса.Цель конструктора - вычислить и сохранить первые числа initialCapacity, простые числа, firstCapacity, primefirst initialCapacity, число простых чисел i.Идея состоит в том, что вы вычисляете числа один раз и сохраняете их, чтобы вы могли использовать их несколько раз.Вы должны использовать ArrayList для хранения простых чисел.Алгоритм вычисления простых чисел представлен в следующем разделе.

  1. Начните с пустого списка простых чисел.Вы можете представить этот список, используя ArrayList.

  2. Хотя размер ArrayList не равен n, рассмотрите простое число следующего кандидата.Первоначально следующее простое число кандидата должно быть 2, но в противном случае оно должно быть преемником предыдущего простого числа кандидата.

  3. Если простое число кандидата является простым, то добавьте его кlist.

  4. Продолжите с шага 2.

Обратите внимание, что этот алгоритм предлагает использовать цикл while.Шаг 3 предыдущего алгоритма требует, чтобы вы знали, как решить, является ли данный простой кандидат, c> 1, простым числом.На самом деле, определение простых чисел уже предлагает наивный алгоритм.Например, вы можете использовать цикл while, чтобы проверить, что c% i 6 = 0 для всех натуральных чисел i, таких что 1

Мое решение заключается в следующем:

import java.util.*;
public class Prime {

  public static void main( String[] args ){

  }
  public static void prime( int initialCapacity){
    int index=2;
    int logOfInitialCapacity = initialCapacity / (int)(Math.log(initialCapacity));
    ArrayList<Integer> listOfPrimeNumbers = new ArrayList<Integer>(logOfInitialCapacity);
    boolean[] isPrimeNumber = new boolean[initialCapacity + 1]; // boolean defaults to
    // false

    for (int i=0;i==initialCapacity;i++) {
        isPrimeNumber[index] = true;
      }
      while ( index <= listOfPrimeNumbers.size() )
      {
        if (isPrimeNumber[index]) {
          listOfPrimeNumbers.add(index);
        }
      for (int j = index; j * index <= initialCapacity; j++) {
          isPrimeNumber[index * j] = false;
      }
         // Now mark the multiple of i as non-prime number
        index++;
      }
  }

}

, который должен вычислить первую initialCapacity простых чисел и сохранить их в arrayList, как задает вопрос ... Я простоне уверен, что я сделал именно так, как говорит вопрос.Вероятно, это скорее результат учебы в течение всего дня и немного утомленный, чем что-либо еще!

Большое спасибо за помощь и за чтение всего этого;извините за длинный пост.

Ответы [ 2 ]

2 голосов
/ 28 ноября 2010

Вы можете ответить на свой вопрос следующим образом:

http://primes.utm.edu/lists/small/1000.txt

Если их нет в вашем списке, ваш код делает это неправильно.

Вы хотите прочитать это:

http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes

1 голос
/ 28 ноября 2010

Ваше решение не соответствует описанию проблемы.

Описание проблемы предписывает тестирование на простоту (т. Е. С учетом простого числа кандидата, проверяет, является ли оно простым). Он также хочет initialCapacity простых чисел.

Проблемы с вашим решением:

  1. Кажется, он пытается просеять
  2. это неэффективно, потому что кратные составного числа вычеркнуты.
  3. находит простые числа до initialCapacity (не первые initialCapacity простые числа - чтобы увидеть разницу, попробуйте initialCapacity = 1).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...