我有一个数字文件,我需要素数分解。所以看起来应该是这样的: 输出中“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逐一划分,直到它出现在第一篇文章中没有余数进入上述分解。
这有意义吗?
答案 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 ...
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次,代码不在主要因素化。