我正在用python编写一个程序。我引入了一个整数,程序还给我这个数的素因子分解。 例如6--->;3,2。另一个例子16-->2,2,2,2。在
我正在用OOP来做。我用2个方法(is_prime
和prime_factor_decomposition
)创建了一个类(PrimeFactors
)。第一种方法表示这个数是否为素数,第二种方法给出分解结果。在
代码如下:
class PrimeFactors(object):
def __init__(self, number):
self.number = number
def is_prime(self):
n = self.number - 1
a = 0
loop = True
if self.number == 1 or self.number == 2:
loop = False
while n >= 2 and loop:
if self.number % n != 0:
n -= 1
else:
a += 1
loop = False
return a == 0
def prime_factor_decomposition(self):
factors = []
n = self.number - 1
loop = True
if PrimeFactors.is_prime(self.number):
factors.append(self.number)
loop = False
while n >= 2 and loop:
if self.number % n == 0 and PrimeFactors.is_prime(n):
factors.append(n)
self.number = self.number / n
if self.number % n == 0:
n += 1
n -= 1
return factors
s = PrimeFactors(37)
print(s.is_prime())
我弄错了。我想是和方法调用有关的。 我的问题是,如果另一个方法都来自同一个类,如何从另一个方法调用它们?在
Jkdc的回答绝对正确。我还想指出,你的方法调用会有问题。您定义了}。在
is_prime
,以self
作为它的唯一参数,但是当您调用它时,您将传入self.number
或{如果您需要
is_prime
来处理任意数字,而不仅仅是初始化该类的任何内容,那么您应该添加一个额外的参数。在您需要使用
self.
调用同一类的另一个方法:只是一个一般的建议:有好的(和快速的!)检查一个数是否为素数的算法。你的循环从n-1开始,效率很低。假设数字是 1000000,所以你的算法从999999开始,但是第一个偶数可能是n的一半!所以我会从2到n/2:
我认为对于你来说,最好不是返回一个布尔值,而是返回一个被发现是除数的数字:
^{pr2}$然后可以反复调用该方法,只会得到质数。在
相关问题 更多 >
编程相关推荐