Spoiler-Alert! Вы увидите решение для projecteuler.net. Проблема 7.F # - Обратный элемент из последовательности
Прошу прощения, если это дубликат, но я не мог найти здесь вопрос о том же.
Я вычисляю последовательность чисел в функции и хочу вернуть n-е число.
let isPrime x =
{2..x/2}
|> Seq.exists (fun e -> x%e=0)
|> not
let PrimeNumber nth =
let unfolder a =
a
|> Seq.unfold (fun e -> Some(e, e+1))
|> Seq.find isPrime
|> fun e -> Some(e, e)
2
|> Seq.unfold unfolder
|> Seq.skip (nth-1)
|> Seq.head
let ans = PrimeNumber 10001
ans
всегда будет 2, но почему?
Когда я вычисляю последнее выражение в PrimeNumber
с nth=10001
, тогда верный элемент возвращается. Я что-то упускаю?
Изменение '|> fun e -> Some (e, e)' to '|> fun e -> Some (e, e + 1)' исправлено. Спасибо за подсказку. После перезапуска визуальной студии он не оценил правильное решение. Я не знаю, почему это сработало раньше. – itmuckel
@ Micha90: пересмотреть 'e + 1' - это будет проверять каждое четное число бессмысленно. – ildjarn
Что вы предлагаете? e + 2 пропускает 3 как штрих, когда я начинаю с 2. Также он дает неправильное решение, nth + 1 простое число. И он работает не быстрее, но я не понимаю, почему. Я ожидал, что он будет работать в два раза быстрее. – itmuckel