Python练习题答案: 因式分解【难度:2级】--景越Python编程实例训练营,1000道上机题等你来挑战

mac2026-03-31  4

因式分解【难度:2级】:

答案1:

class PrimeFactorizer: def __init__(self, num): self.factor = {} for i in xrange(2, num + 1): if (num < i): break while(num % i == 0): num /= i self.factor[i] = self.factor.get(i, 0) + 1

答案2:

from collections import Counter class PrimeFactorizer(int): @property def factor(self): step = lambda x: 1 + x*4 - (x//2)*2 maxq = int(self ** .5) d = 1 q = self % 2 == 0 and 2 or 3 while q <= maxq and self % q != 0: q = step(d) d += 1 res = Counter() if q <= maxq: res += PrimeFactorizer(self//q).factor res += PrimeFactorizer(q).factor else: res = Counter([self]) return res​

答案3:

class PrimeFactorizer: def __init__(self, number): self.num = number self.factor = {} d = 2 while self.num > 1: while self.num % d == 0: self.num /= d self.factor.setdefault(d, 0) self.factor[d] += 1 d += 1 if d*d > self.num: if self.num > 1: self.factor.setdefault(self.num, 0) self.factor[self.num] += 1 break

答案4:

from collections import defaultdict class PrimeFactorizer: #your code here def __init__(self, number): self.factor = defaultdict(int) init_num = number i = 2 while number > 1 and i <= init_num: if number % i == 0: self.factor[i] += 1 number /= i else: i+=1

答案5:

class PrimeFactorizer: def __init__(self, n): self.factor = {} i = 2 while i <= n: while n%i == 0: occ = 0 if i in self.factor: occ = self.factor[i] self.factor[i] = occ+1 n /= i i+=1

答案6:

class PrimeFactorizer: def __init__(self, number): self.factor = {} self.number = abs(number) self.prime_factors() pass def prime_factors(self): i,x = 0,2 while self.number >= x: if self.number % x: x += 1 else: self.number = self.number // x ; self.factor[x] = self.factor[x] + 1 if x in self.factor else 1 pass

答案7:

from collections import Counter def factor(n): f = Counter() i = 2 while n % i == 0: f[i] += 1 n //= i i = 3 while i*i <= n: while n % i == 0: f[i] += 1 n //= i i += 2 if n > 1: f[n] = 1 return f class PrimeFactorizer: def __init__(self, n): self.factor = factor(n)

答案8:

import itertools class PrimeFactorizer: def __init__(self, num): print(num) self.number = num self.factor = self.toDict(self.findFactors(num)) #checks if a given value is a prime number def isPrime(self, num): for i in itertools.chain(range(2,2),range(3,num-1,2)): if num%i == 0: return False return True #finds the prime factory of a given number def findFactors(self, num): for i in range(2,num+1): if i == num: return [i] elif num % i == 0 and self.isPrime(i): return self.findFactors(int(num/i)) + [i] #converts array of factory to the dictionary required by the Kata def toDict(self, arr): ans = {} for item in list(set(arr)): ans[item] = arr.count(item) return ans ​

答案9:

from collections import Counter from math import floor, sqrt class PrimeFactorizer: def __init__(self, n): self.n = n @property def factor(self): return Counter(PrimeFactorizer._get_factors_(self.n)) @classmethod def _get_factors_(cls, n): def __get_factor__(n): for i in xrange(2, 1 + int(floor(sqrt(n)))): if n % i == 0: return i return n prime_factors = [] factor = __get_factor__(n) if factor == n: return [factor] factors = [factor, n / factor] while factors: factor = factors.pop() new_factor = __get_factor__(factor) if new_factor == factor: prime_factors.append(factor) else: factors.extend([new_factor, factor / new_factor]) return prime_factors ​

答案10:

class PrimeFactorizer: def __init__(self, n): def ps(): l = [] i = 2 while True: for p in l: if not i % p: break else: l.append(i) yield i i += 1 r = {} for p in ps(): if n == 1: break while n >= p and not n % p: if p not in r: r[p] = 0 r[p] += 1 n /= p self.factor = r ​

景越Python基础训练营QQ群

欢迎各位同学加群讨论,一起学习,共同成长!

最新回复(0)