Во-первых, я предполагаю, что вы не хотите, простое решение, дело, которое было бы перебором, и приведет к медленному неоптимизированном кода.
Я не собираюсь писать для вас код, но я объясню теорию этого и даю вам некоторый псевдокод.
func findPrimeNumber(int n){
primeArray = []
int number = 1
while(primeArray.length < n){
if(isNumberPrime(number) == true){
primeArray.append(number, primeArray)
}
number++
}
}
func isNumberPrime(int number, int[] primeArray){
var minCheck = Math.roundUp(Math.sqrt(number))
foreach prime in primeArray{
if(prime <= minCheck && prime > 1){
if(number % prime != 0){
//keep checking numbers
}else{
return false
}
}else{
break; //no more checking is necessary
}
return true;
}
}
Я реализовал две основные концепции в вышеуказанном псевдокоде (возможно, вам придется улучшить код для краевых случаев).
Выполнение алгоритма, который определяет, является ли число простым простым путем проверки из 2 ... n-1, является неэффективным и расточительным.
- Вам нужно всего лишь проверить номера до квадратного корня вашего номера, с которым вы столкнулись. Например, чтобы определить, является ли 16 простым, вам нужно только проверить, являются ли 2, 3, 4 простым. (ответ да в виде 2 и 4).
Как насчет 17? 2,3,4,5 не являются делимыми и 17 - простое.
- Вам нужно всего лишь проверить основные факторы. Нет никакого смысла проверять, является ли число простым, деля его на непустые числа, так как каждое не-простое состоит из простых чисел в конечном счете. Таким образом, вам нужно только проверить основные факторы, которые меньше квадратного корня.
С точки зрения определения 24-й итерации может быть динамическое программирующее решение, более интеллектуальное, чем мое, но я просто линейно ищу первые 24 числа, но оптимизирую процесс поиска так, чтобы он был быстрым.
Дайте мне знать, если вам нужна дополнительная помощь. Удачи, забавная маленькая проблема.
'Можете ли вы помочь мне найти самый простой способ сделать это'? Конечно, просто покажите свой трудный путь, чтобы мы могли работать над этим. – Eser
Привет! Я попытался сделать что-то вроде этого: [http://pastebin.com/LPER5CNq] это мой трудный путь :( –