geschrieben, die ich mal publizieren wollte
Code: Alles auswählen
#!/usr/bin/python
# Author [Editiert]
# License noch keine aber auf jedenfall GPL kompatibel :)
# Object, das primzahlen generieren,
# und/oder zahlen in ihre primfactoren zerlegen kann
# keine ahnung was man noch so schreibt, viel Spaß ;)
class Primops(object):
"""
handles two prim-operations
"""
counter = 0
def __init__(self, prims = [2]):
self.prims = prims
if self.prims[-1] > 2: self._proof = self.prims[-1] +2
else: self._proof = 3
def generate(self):
"""
tests if _proof is a prim
"""
for prim in self.prims:
if ( self._proof % prim ) == 0:
self._proof += 2
return False
elif ( self._proof / prim ) < prim:
self.prims.append(self._proof)
self._proof += 2
return True
def loop(self, max = 1):
"""
generates new prim's
"""
if max == 1:
while max:
if self.generate(): print self.prims[-1]
elif max > self._proof:
while max > self._proof:
if self.generate(): print self.prims[-1]
def aktuell(self):
"""
returns the aktuell used prim
is used by split only
"""
return self.prims[self.counter]
def count(self):
"""
next prim
is used by split only
"""
self.counter += 1
def cycle(self):
"""
begin with the first prime
is used by split only
"""
self.counter = 0
def split(self, number):
"""
splits a number into its factors
and returns all factors
"""
self._number = number
self.splits = []
while 1:
try: self.prim = self.aktuell()
except:
self.generate()
continue
if ( self._number % self.prim ) == 0:
self.splits.append(self.prim)
self._number /= self.prim
self.cycle()
elif ( self._number / self.prim ) < self.prim:
if self._number != 1: self.splits.append(self._number)
self.cycle()
return self.splits
else: self.count()