Я иду в проект Euler Q3 и должен получить наибольший простой коэффициент числа. До сих пор я получил пару функций, чтобы вернуть список всех факторов данного номера, но это кажется очень плохим способом сделать это (отчасти потому, что мне нужен только самый большой).Как написать это как одну функцию?
get_factors :: (Integral a) => a -> [a] -> [a]
get_factors _ [] = []
get_factors t (x:xs)
| t `mod` x == 0 = x:get_factors t xs
| otherwise = get_factors t xs
factors :: (Integral a) => a -> [a]
factors x = get_factors x [x,x-1..1]
> factors 1000
> [1000,500,250,200,125,100,50,40,25,20,10,8,5,4,2,1]
Это кажется странным мне, что я должен был бы иметь функцию «запуска», если вы будете начать рекурсивную функцию выключения (или иметь функцию, где я должен передать ему такое же значение дважды, опять же, кажется глупым для меня).
Можете ли вы указать мне в правильном направлении, как я должен заниматься этим, пожалуйста?
Я просто хочу указать, что если 'y' - наименьший простой коэффициент' x', то 'x \' div \ 'y' является самым большим. Вы можете сохранить некоторые вычисления здесь. Если вы используете [быстрое выполнение решеток Eratoshenes] (http://en.literateprograms.org/Sieve_of_Eratosthenes_%28Haskell%29) вместо списка линейных пробных дивизоров, вы можете сэкономить еще немного. –
@ н.м. '' '' '' '' '' '' '' 'не должно быть простым. – hammar
@hammar Да, только что понял, что после попадания в ... OTOH представленная процедура также не дает простых факторов. –