Welcome, guest | Sign In | My Account | Store | Cart
"""
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
        

History