试图获得Eratosthenes筛选的主要因子分解

时间:2014-08-26 22:13:34

标签: python

我有一个数字文件,我需要素数分解。所以看起来应该是这样的: 输出中“250,000,001 = 148,721 * 41 * 41”。 到目前为止我的代码是:

factors = [2, 5, 7, 9, -1]

def primeFactors(x, primes):
    myList = []
    myFile = open('ten.txt', 'r', encoding = 'utf-8')
    for x in myFile:
        x = (int(x) % f for f in factors)
        myList.append(x)
        print(myList)

primeFactors(open('ten.txt', 'r', encoding = 'utf-8'), factors)

输出为(生成器对象(genexpr)为0x100647870)

我甚至需要做些什么才能列出所列出的因素?

修改 我想我应该提到这是完全错误的我意识到这一点。但在这里我对我的代码进行了一些编辑。我打算使用低于10,000,000的因子打印出因子分解。

factors = [2, 3, 5, 7, 11, -1]
n = 10000000
primes = list()
multiples = set() #creates list of primes out of 10,000,000
for i in range(2, n+1):
    if i not in multiples:
        primes.append(i)
        multiples.update(range(i*i, n+1, i))

def primeFactors(x, primes):
    factors = [f for f in primes]    #trying to get the factorization for 25,000,001
    if x % factors == 0:
        return primes
primeFactors(25000001, primes)

问题在于我不知道如何得到我的x值,25000001逐一划分,直到它出现在第一篇文章中没有余数进入上述分解。

这有意义吗?

4 个答案:

答案 0 :(得分:0)

试试这个:

myList.extend(x)

而不是:

myList.append(x)

答案 1 :(得分:0)

您的代码不会输出您声称的内容。

你实际得到的是:

[<generator object <genexpr> at 0x1091ee410>]
[<generator object <genexpr> at 0x1091ee410>, <generator object <genexpr> at 0x1091ee440>]
[<generator object <genexpr> at 0x1091ee410>, 
 <generator object <genexpr> at 0x1091ee440>,
 <generator object <genexpr> at 0x1091ee470>]

......等等。


为什么?

好吧,每个x都是一个生成器:

x = (int(x) % f for f in factors)

因此,每次循环时,都会向列表中再添加一个生成器。

你是如何解决的?那么,这取决于你打算做什么。您是否要添加所有剩余的列表而不是生成器?如果是,请使用[…]代替(…)。您是否要将每个余数本身添加到列表中?如果是,请使用myList.extend代替.append


此外,您使用相同的名称x来表示三个不同的东西:函数的第一个参数,循环变量,以及添加到列表中的生成器表达式。每次给它一个新的值,你就会失去旧值。这不可能是正确的。但同样,我很难想象你实际上想要做什么。

答案 2 :(得分:0)

更改参数名称x - &gt;使用 for x ...

与名称不匹配的par_x
def primeFactors( par_x, primes ):

在函数调用中多次分配给x - 修复

 for x ...                                          # sets x as a <for> iterator
     anotherVar_x = ( int(x) % f for f in factors)  # sets x again -> anotherVar_x

答案 3 :(得分:0)

如果您需要打印x内计算的数字,我建议使用list comprehension而不是生成器对象:

x = [int(x) % f for f in factors]
print(x)

另请注意,x内的for x in myFile会覆盖x primeFactors(x, primes)open同一个文件2次,代码不在主要因素化。