Я в основном пытаюсь вычислить факторы BigInteger, которые являются первичными, у меня есть две простые функции факторизации, они оба выглядят так, как будто они должны приводить к одному и тому же результату в том, как я использовал их здесь внизу, но это не так здесь, может кто-нибудь объяснить, что происходит?вычисление простых коэффициентов с использованием одного и того же кода дает разные результаты?
let lookupTable = new HashSet<int>(primes)
let isPrime x = lookupTable.Contains x
let factors (n:bigint) =
Seq.filter (fun x -> n % x = 0I) [1I..n]
let factors' (n:bigint) =
Seq.filter (fun x -> n % x = 0I) [1I..bigint(sqrt(float(n)))]
600851475143I
|> fun n -> bigint(sqrt(float(n)))
|> factors
|> Seq.map int
|> Seq.filter isPrime
|> Seq.max // produces 137
600851475143I
|> factors'
|> Seq.map int
|> Seq.filter isPrime
|> Seq.max // produces 6857 (the right answer)
Первая программа факторизует 'sqrt (n)', а не 'n'. Я голосую, чтобы закрыть этот вопрос по причине «типографской ошибки». – bytebuster
I actaully сказал: «Они должны произвести тот же результат ***, как я их использовал *** здесь внизу», и я имел в виду кусок кода после определения функции –
. Ваше намерение не изменяет характер фактического ошибка; @bytebuster полностью прав в этом случае. – ildjarn