相关疑难解决方法(0)

Haskell中的主要因素

我是Haskell的新手.

如何生成包含下一个整数的素因子的列表列表?

现在我只知道如何生成素数:

primes = map head $ iterate (\(x:xs) -> [y | y<-xs, y `mod` x /= 0 ]) [2..]
Run Code Online (Sandbox Code Playgroud)

primes haskell prime-factoring factorization

14
推荐指数
3
解决办法
1万
查看次数

在Python中对一个数字进行分解

这是我的代码:

def factorize(n):
    sieve = [True] * (n + 1)

    for x in range(2, int(len(sieve) ** 0.5) + 1):
        if sieve[x]: 
            for i in range(x + x, len(sieve), x):
                sieve[i] = False

lowerPrimes = i for i in range(2, len(sieve)) if sieve[i]] and (n % i == 0)]
return lowerPrimes
Run Code Online (Sandbox Code Playgroud)

factorize(n)返回给定值的所有素因子n.正如你所看到的,它首先制作一个Eratosthenes筛子n,然后使用列表理解来返回筛子中所有值的因子n.它为此目的工作得相对较好,但是,我希望它返回一个列表,这样如果你将其中的每个项目相乘,结果就是n.你明白了吗?

例如,factorize(99020)返回[2, 5, 4951],但我希望它返回[2, 2, 5, 4951],如2*2*5*4951 = 99020.

我知道我的方法甚至不是很接近,但你能帮助我做到这一点吗?

python primes loops sieve-of-eratosthenes prime-factoring

4
推荐指数
2
解决办法
8264
查看次数

Haskell通过数值将列表拆分为两个

我想通过一个数据透视值将[a]分成([a],[a]),我有我的代码

splitList :: (Ord a) => a -> [a] -> ([a],[a])
splitList pivot list = 
    ([x | x <- list, x <= pivot], [x | x <- list, x > pivot])
Run Code Online (Sandbox Code Playgroud)

但它迭代列表两次以生成两个列表,有没有办法只迭代一次?

haskell

3
推荐指数
1
解决办法
1218
查看次数

使用列表理解进行素数分解

我想.在Haskell中仅使用列表推导方法和/或(函数组合运算符)找到给定数字的所有素因子.我特别想避免递归解决方案.

例如,pfactors 120必须产生[2,2,2,3,5]输出.

我试过了:

pfactors n = [p | p <- [2..n], n `mod` p == 0, [d | d <- [1..p], p `mod` d == 0] == [1,p]]
Run Code Online (Sandbox Code Playgroud)

但是当我打电话时pfactors 120,结果[2,3,5]并非所有的主要因素.

haskell prime-factoring

3
推荐指数
1
解决办法
765
查看次数

如何将此作为单一功能编写?

我正在参加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]
Run Code Online (Sandbox Code Playgroud)

对我来说,如果你要启动递归功能,我需要有一个"启动"功能似乎很奇怪(或者有一个函数,我必须将它传递两次相同的值,再次,对我来说似乎很愚蠢).

你能指出我应该如何做到这一点的正确方向吗?

haskell

1
推荐指数
1
解决办法
173
查看次数