diff --git a/main.py b/main.py
index 8d66d7cefefddc309572181729b3683e2775cfbe..870b53c1b8fe54cd49f93492c3dbd0e7b7b3989a 100644
--- a/main.py
+++ b/main.py
@@ -1,28 +1,41 @@
 """Hamming Number Challenge."""
 
 
-def ham():
-    """Calculate First 8000 Hamming numbers."""
-    ham_list = set()
-    for i in range(20):
-        for j in range(20):
-            for k in range(20):
-                ham_list.add(2**i * 3**j * 5**k)
-    return sorted(ham_list, key=int)
+def hamming(n):
+    """Returns the nth hamming number."""
+
+    ham_list = [1] * n
+
+    x2, x3, x5 = 2, 3, 5
+    i, j, k = 0, 0, 0
+    for num in range(1, n):
+        ham_list[num] = min(x2, x3, x5)
+        if ham_list[num] == x2:
+            i += 1
+            x2 = 2 * ham_list[i]
+        if ham_list[num] == x3:
+            j += 1
+            x3 = 3 * ham_list[j]
+        if ham_list[num] == x5:
+            k += 1
+            x5 = 5 * ham_list[k]
+    return ham_list[-1]
 
 
 def main():
     """Drive the example."""
-    ham_list = ham()
 
-    def is_ham(x):
-        return x in ham_list
+    print("First 25 hamming numbers :")
+    for i in range(1, 25+1):
+        print(hamming(i), end=', ')
+    print()
 
-    print("First 25 hamming numbers\n", ham_list[:25])
-    print("The 137th hamming number\n", ham_list[136])
+    print("The 137th hamming number\n", hamming(137))
 
-    print("%d is ham? %s" % (1700, is_ham(1700)))
-    print("%d is ham? %s" % (1215, is_ham(1215)))
+    lst = [hamming(h) for h in range(1, 1001)]
+
+    print("%d is ham? %s" % (1700, 1700 in lst))
+    print("%d is ham? %s" % (1215, 1215 in lst))
 
 
 if __name__ == "__main__":