我有一個(gè)Python列出了一些主要因素。我如何(以Python方式)找到所有因素?
相反,指數(shù)清單,考慮簡(jiǎn)單地 重復(fù) 利用的次數(shù)每一個(gè)素因子它 是一個(gè)因素。然后,處理生成primefactors的帶有重復(fù)的列表,itertools.combinations即可滿足您的需要-您只需要將長(zhǎng)度2 len(primefactors) - 1的組合包含在所包含的項(xiàng)目中(只有一個(gè)的組合是主要因素,所有其中一個(gè)將是原始編號(hào)-如果您也想要這些編號(hào),請(qǐng)使用range(1, len(primefactors) + 1)而不是range(2,len(primefactors))我的主要建議所使用的編號(hào))。
結(jié)果中將存在重復(fù)(例如,6將出現(xiàn)的結(jié)果是的兩倍12,因?yàn)楹笳遬rimefactors將是[2, 2,3]),并且當(dāng)然可以按照通常的方式(sorted(set(results))例如)清除它們。
要計(jì)算primefactors給定listofAllPrimes,請(qǐng)考慮以下示例:
def getprimefactors(n): primefactors = [] primeind = 0 p = listofAllPrimes[primeind] while p <= n:if n % p == 0: primefactors.append(p) n //= pelse: primeind += 1 p = listofAllPrimes[primeind] return primefactors解決方法
我正在研究需要對(duì)整數(shù)進(jìn)行因子分解的Euler項(xiàng)目。我可以列出所有給定數(shù)字的質(zhì)數(shù)的列表。算術(shù)基本定理意味著我可以使用此列表來(lái)得出數(shù)字的 每個(gè) 因子。
我當(dāng)前的計(jì)劃是將基本質(zhì)數(shù)列表中的每個(gè)數(shù)字取整并提高其冪,直到找到每個(gè)質(zhì)數(shù)的最大指數(shù)不再是整數(shù)因子為止。然后,我將乘以素?cái)?shù)對(duì)的所有可能組合。
例如,對(duì)于180:
Given: prime factors of 180: [2,3,5]Find maximum exponent of each factor: 180 / 2^1 = 90 180 / 2^2 = 45 180 / 2^3 = 22.5 - not an integer,so 2 is the maximum exponent of 2. 180 / 3^1 = 60 180 / 3^2 = 20 180 / 3^3 = 6.6 - not an integer,so 2 is the maximum exponent of 3. 180 / 5^1 = 36 180 / 5^2 = 7.2 - not an integer,so 1 is the maximum exponent of 5.
接下來(lái),對(duì)所有這些組合進(jìn)行最大冪運(yùn)算以得到因子:
2^0 * 3^0 * 5^0 = 1 2^1 * 3^0 * 5^0 = 2 2^2 * 3^0 * 5^0 = 4 2^0 * 3^1 * 5^0 = 3 2^1 * 3^1 * 5^0 = 6 2^2 * 3^1 * 5^0 = 12 2^0 * 3^2 * 5^0 = 9 2^1 * 3^2 * 5^0 = 18 2^2 * 3^2 * 5^0 = 36 2^0 * 3^0 * 5^1 = 5 2^1 * 3^0 * 5^1 = 10 2^2 * 3^0 * 5^1 = 20 2^0 * 3^1 * 5^1 = 15 2^1 * 3^1 * 5^1 = 30 2^2 * 3^1 * 5^1 = 60 2^0 * 3^2 * 5^1 = 45 2^1 * 3^2 * 5^1 = 90 2^2 * 3^2 * 5^1 = 180
因此,因子列表= [1、2、3、4、5、6、9、10、12、15、18、20、30、36、45、60、90、180]
這是我到目前為止的代碼。有兩個(gè)問(wèn)題:首先,我認(rèn)為這完全不是Python語(yǔ)言。我想解決這個(gè)問(wèn)題。其次,我 真的沒(méi)有Python方式可以完成第二步。出于恥辱,我使您擺脫了荒謬的循環(huán)。
n是我們要分解的數(shù)字。listOfAllPrimes是不超過(guò)1000萬(wàn)個(gè)素?cái)?shù)的預(yù)先計(jì)算的列表。
def getListOfFactors(n,listOfAllPrimes): maxFactor = int(math.sqrt(n)) + 1 eligiblePrimes = filter(lambda x: x <= maxFactor,listOfAllPrimes) listOfBasePrimes = filter(lambda x: n % x ==0,eligiblePrimes) listOfExponents = [] #(do I have to do this?) for x in listOfBasePrimes:y = 1while (x**(y+1)) % n == 0: y += 1listOfExponents.append(y)
相關(guān)文章:
1. Intellij IDEA 2019 最新亂碼問(wèn)題及解決必殺技(必看篇)2. css3溢出隱藏的方法3. ASP.NET MVC獲取多級(jí)類別組合下的產(chǎn)品4. JS+css3實(shí)現(xiàn)幻燈片輪播圖5. Android自定義View實(shí)現(xiàn)掃描效果6. 關(guān)于HTML5的img標(biāo)簽7. PHP5.0正式發(fā)布 不完全兼容PHP4 新增多項(xiàng)功能8. Android Manifest中meta-data擴(kuò)展元素?cái)?shù)據(jù)的配置與獲取方式9. JS繪圖Flot如何實(shí)現(xiàn)動(dòng)態(tài)可刷新曲線圖10. Idea 快速生成方法返回值的操作
