""" A Fun Widget Class For Playing With Prime, Perfect and Fibonacci Numbers """ class PrimePerFib: def __init__(self): pass def PrimeGen(self, count, start=0): Primes = [] x = 2 output = 0 while output < count: if not [y for y in Primes if x % y == 0 ]: Primes.append(x) if x >= start: x += 1 output += 1 yield Primes[len(Primes)-1] x += 1 def PrimeGet(self, num): return self.PrimeGen(1,num).next() def IsPrime(self, num): return (False,True)[self.PrimeGet(num)==num] def NextPrime(self, num): return (self.PrimeGet(num),self.PrimeGet(num+1))[self.IsPrime(num)] def PerfectGen(self, count, start=0): output = 0 prime = 0 while output < count: prime = self.NextPrime(prime) pN =(2**(prime-1))*(2**prime - 1) if pN >= start: output += 1 yield pN def PerfectGet(self, num): return self.PerfectGen(1,num).next() def IsPerfect(self, num): return (False,True)[self.PerfectGet(num)==num] def NextPerfect(self, num): return (self.PerfectGet(num),self.PerfectGet(num+1))[self.IsPerfect(num)] def FibonacciGen(self, count, start=0): output = 0 fib = [0,1] while output < count: fN = fib[len(fib)-1] + fib[len(fib)-2] fib.append(fN) fib.pop(0) if fN >= start: output += 1 yield fN def FibonacciGet(self, num): return self.FibonacciGen(1,num).next() def IsFibonacci(self, num): return (False,True)[self.FibonacciGet(num)==num] def NextFibonacci(self, num): return (self.FibonacciGet(num),self.FibonacciGet(num+1))[self.IsFibonacci(num)] if __name__ == '__main__': PPF = PrimePerFib() ########################################################################## #Prime Numbers print "What Prime Number Comes After 56? ",PPF.NextPrime(56) print "Is 333 A Prime Number? ",PPF.IsPrime(333) Primes = [] for Prime in PPF.PrimeGen(10, 191): Primes.append(Prime) print "Generated Primes ",Primes,"\n\n" ########################################################################## #Perfect Numbers print "What Perfect Number Comes After 9685 ",PPF.NextPerfect(9685) print "Is 8128 A Perfect Number ",PPF.IsPerfect(8128) Perfects = [] for Perfect in PPF.PerfectGen(10, 0): Perfects.append(Perfect) print "Generated Perfect Numbers ",Perfects,"\n\n" ########################################################################## #Fibonacci Numbers print "What is the Next Fibonacci Number After 5 ? ",PPF.NextFibonacci(5) print "Is 16 A Fibonacci Number? ",PPF.IsFibonacci(16) Fibonaccis = [] for Fibonacci in PPF.FibonacciGen(42, 10): Fibonaccis.append(Fibonacci) print "Generated Fibonacci Numbers ",Fibonaccis