In [2]:
def validTriangle(a: float, b: float, c: float) -> bool:
    """
    Returns True if the side lengths (a, b, c) can form a triangle.
    """
    assert a > 0 and b > 0 and c > 0, "Side lengths cannot be negative"
    return a < b + c and b < a + c and c < a + b

print(validTriangle(1, 2, 3))
print(validTriangle(3, 4, 5))
False
True
In [4]:
c = 100
while c >= 1:
    print(c)
    c = c - 1
print("Ignition at", c)
100
99
98
97
96
95
94
93
92
91
90
89
88
87
86
85
84
83
82
81
80
79
78
77
76
75
74
73
72
71
70
69
68
67
66
65
64
63
62
61
60
59
58
57
56
55
54
53
52
51
50
49
48
47
46
45
44
43
42
41
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
Ignition at 0
In [12]:
c = 100
while c >= 1:
    print(c)
    c = c + 1
print("Ignition at", c)
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
---------------------------------------------------------------------------
KeyboardInterrupt                         Traceback (most recent call last)
Input In [12], in <cell line: 2>()
      1 c = 100
      2 while c >= 1:
----> 3     print(c)
      4     c = c + 1
      5 print("Ignition at", c)

File /mnt/zfs/jupyter-p03/home/gkrichar/.ipython/profile_default/startup/cs114-setup.py:5, in print(*args, **kwargs)
----> 5 def print(*args, **kwargs): builtins.print(*args, **kwargs); sys.stdout.flush(); time.sleep(0.04)

KeyboardInterrupt: 
In [8]:
print(2 ** 150)
1427247692705959881058285969449495136382746624
In [13]:
import math

def firstSquareGreaterThan(x: int) -> int:
    """
    Returns the first square number (number with an integer square root) greater
    than x.
    """
    r = x + 1
    while True:
        sr = math.sqrt(r)
        if int(sr) == sr:
            return r
        r = r + 1
        
print(firstSquareGreaterThan(4200))
4225
In [19]:
def factorial(n: int) -> int:
    """
    Returns n factorial.
    """
    assert n > 0, "Factorial is only defined for positive integers"
    res = 1
    while n > 0:
        res = res * n
        n = n - 1
    return res

print(factorial(5))
print(factorial(50))
print(factorial(500))
120
30414093201713378043612608166064768844377641568960512000000000000
1220136825991110068701238785423046926253574342803192842192413588385845373153881997605496447502203281863013616477148203584163378722078177200480785205159329285477907571939330603772960859086270429174547882424912726344305670173270769461062802310452644218878789465754777149863494367781037644274033827365397471386477878495438489595537537990423241061271326984327745715546309977202781014561081188373709531016356324432987029563896628911658974769572087926928871281780070265174507768410719624390394322536422605234945850129918571501248706961568141625359056693423813008856249246891564126775654481886506593847951775360894005745238940335798476363944905313062323749066445048824665075946735862074637925184200459369692981022263971952597190945217823331756934581508552332820762820023402626907898342451712006207714640979456116127629145951237229913340169552363850942885592018727433795173014586357570828355780158735432768888680120399882384702151467605445407663535984174430480128938313896881639487469658817504506926365338175055478128640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
In [17]:
def sumTo(n: int) -> int:
    """
    Returns the sum of the positive integers from 1 to n.
    """
    assert n > 0, "Sum-to is only defined for positive integers"
    res = 0
    while n > 0:
        res = res + n
        n = n - 1
    return res

print(sumTo(5))
print(sumTo(50))
print(sumTo(500))
15
1275
125250
In [18]:
def factorial(n: int) -> int:
    """
    Returns n factorial.
    """
    assert n > 0, "Factorial is only defined for positive integers"
    res = 1
    print("At beginning, res =", res, "n =", n)
    while n > 0:
        print("At beginning of loop, res =", res, "n =", n)
        res = res * n
        n = n - 1
        print("At end of loop, res =", res, "n =", n)
    return res

print(factorial(5))
At beginning, res = 1 n = 5
At beginning of loop, res = 1 n = 5
At end of loop, res = 5 n = 4
At beginning of loop, res = 5 n = 4
At end of loop, res = 20 n = 3
At beginning of loop, res = 20 n = 3
At end of loop, res = 60 n = 2
At beginning of loop, res = 60 n = 2
At end of loop, res = 120 n = 1
At beginning of loop, res = 120 n = 1
At end of loop, res = 120 n = 0
120
In [21]:
print(factorial(500))
print(factorial(500.0))
<cell>2: error: Argument 1 to "factorial" has incompatible type "float"; expected "int"  [arg-type]
1220136825991110068701238785423046926253574342803192842192413588385845373153881997605496447502203281863013616477148203584163378722078177200480785205159329285477907571939330603772960859086270429174547882424912726344305670173270769461062802310452644218878789465754777149863494367781037644274033827365397471386477878495438489595537537990423241061271326984327745715546309977202781014561081188373709531016356324432987029563896628911658974769572087926928871281780070265174507768410719624390394322536422605234945850129918571501248706961568141625359056693423813008856249246891564126775654481886506593847951775360894005745238940335798476363944905313062323749066445048824665075946735862074637925184200459369692981022263971952597190945217823331756934581508552332820762820023402626907898342451712006207714640979456116127629145951237229913340169552363850942885592018727433795173014586357570828355780158735432768888680120399882384702151467605445407663535984174430480128938313896881639487469658817504506926365338175055478128640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
inf
In [22]:
def printFloat(f: float) -> None:
    """
    Print the floating-point number f.
    """
    assert f >= 0, "I'm too lazy to handle negatives"
    i = int(f)
    print(i, ".")
    rem = f - i
    while rem > 0:
        rem = rem * 10
        i = int(rem)
        print(i)
        rem = rem - i
        
printFloat(math.pi)
3 .
1
4
1
5
9
2
6
5
3
5
8
9
7
9
3
1
1
5
9
9
7
9
6
3
4
6
8
5
4
4
1
8
5
1
6
1
5
9
0
5
7
6
1
7
1
8
7
5
In [23]:
def factorize(n: int) -> None:
    """
    Prints the factors of n.
    """
    assert n > 0, "Only positive numbers have factors."
    f = 1
    while f <= n:
        if n%f == 0:
            print(f)
        f = f + 1
        
factorize(4200)
1
2
3
4
5
6
7
8
10
12
14
15
20
21
24
25
28
30
35
40
42
50
56
60
70
75
84
100
105
120
140
150
168
175
200
210
280
300
350
420
525
600
700
840
1050
1400
2100
4200
In [25]:
def gcd(a: int, b: int) -> int:
    """
    Returns the greatest common divisor of a and b.
    """
    #return math.gcd(a, b)
    assert a > 0 and b > 0, "Only positive integers have factors"
    gcd = 1
    candidate = 2
    while candidate <= a and candidate <= b:
        if a%candidate == 0 and b%candidate == 0:
            gcd = candidate
        print("GCD so far at", candidate, "is", gcd)
        candidate = candidate + 1
    return gcd

print(gcd(4200, 260))
GCD so far at 2 is 2
GCD so far at 3 is 2
GCD so far at 4 is 4
GCD so far at 5 is 5
GCD so far at 6 is 5
GCD so far at 7 is 5
GCD so far at 8 is 5
GCD so far at 9 is 5
GCD so far at 10 is 10
GCD so far at 11 is 10
GCD so far at 12 is 10
GCD so far at 13 is 10
GCD so far at 14 is 10
GCD so far at 15 is 10
GCD so far at 16 is 10
GCD so far at 17 is 10
GCD so far at 18 is 10
GCD so far at 19 is 10
GCD so far at 20 is 20
GCD so far at 21 is 20
GCD so far at 22 is 20
GCD so far at 23 is 20
GCD so far at 24 is 20
GCD so far at 25 is 20
GCD so far at 26 is 20
GCD so far at 27 is 20
GCD so far at 28 is 20
GCD so far at 29 is 20
GCD so far at 30 is 20
GCD so far at 31 is 20
GCD so far at 32 is 20
GCD so far at 33 is 20
GCD so far at 34 is 20
GCD so far at 35 is 20
GCD so far at 36 is 20
GCD so far at 37 is 20
GCD so far at 38 is 20
GCD so far at 39 is 20
GCD so far at 40 is 20
GCD so far at 41 is 20
GCD so far at 42 is 20
GCD so far at 43 is 20
GCD so far at 44 is 20
GCD so far at 45 is 20
GCD so far at 46 is 20
GCD so far at 47 is 20
GCD so far at 48 is 20
GCD so far at 49 is 20
GCD so far at 50 is 20
GCD so far at 51 is 20
GCD so far at 52 is 20
GCD so far at 53 is 20
GCD so far at 54 is 20
GCD so far at 55 is 20
GCD so far at 56 is 20
GCD so far at 57 is 20
GCD so far at 58 is 20
GCD so far at 59 is 20
GCD so far at 60 is 20
GCD so far at 61 is 20
GCD so far at 62 is 20
GCD so far at 63 is 20
GCD so far at 64 is 20
GCD so far at 65 is 20
GCD so far at 66 is 20
GCD so far at 67 is 20
GCD so far at 68 is 20
GCD so far at 69 is 20
GCD so far at 70 is 20
GCD so far at 71 is 20
GCD so far at 72 is 20
GCD so far at 73 is 20
GCD so far at 74 is 20
GCD so far at 75 is 20
GCD so far at 76 is 20
GCD so far at 77 is 20
GCD so far at 78 is 20
GCD so far at 79 is 20
GCD so far at 80 is 20
GCD so far at 81 is 20
GCD so far at 82 is 20
GCD so far at 83 is 20
GCD so far at 84 is 20
GCD so far at 85 is 20
GCD so far at 86 is 20
GCD so far at 87 is 20
GCD so far at 88 is 20
GCD so far at 89 is 20
GCD so far at 90 is 20
GCD so far at 91 is 20
GCD so far at 92 is 20
GCD so far at 93 is 20
GCD so far at 94 is 20
GCD so far at 95 is 20
GCD so far at 96 is 20
GCD so far at 97 is 20
GCD so far at 98 is 20
GCD so far at 99 is 20
GCD so far at 100 is 20
GCD so far at 101 is 20
GCD so far at 102 is 20
GCD so far at 103 is 20
GCD so far at 104 is 20
GCD so far at 105 is 20
GCD so far at 106 is 20
GCD so far at 107 is 20
GCD so far at 108 is 20
GCD so far at 109 is 20
GCD so far at 110 is 20
GCD so far at 111 is 20
GCD so far at 112 is 20
GCD so far at 113 is 20
GCD so far at 114 is 20
GCD so far at 115 is 20
GCD so far at 116 is 20
GCD so far at 117 is 20
GCD so far at 118 is 20
GCD so far at 119 is 20
GCD so far at 120 is 20
GCD so far at 121 is 20
GCD so far at 122 is 20
GCD so far at 123 is 20
GCD so far at 124 is 20
GCD so far at 125 is 20
GCD so far at 126 is 20
GCD so far at 127 is 20
GCD so far at 128 is 20
GCD so far at 129 is 20
GCD so far at 130 is 20
GCD so far at 131 is 20
GCD so far at 132 is 20
GCD so far at 133 is 20
GCD so far at 134 is 20
GCD so far at 135 is 20
GCD so far at 136 is 20
GCD so far at 137 is 20
GCD so far at 138 is 20
GCD so far at 139 is 20
GCD so far at 140 is 20
GCD so far at 141 is 20
GCD so far at 142 is 20
GCD so far at 143 is 20
GCD so far at 144 is 20
GCD so far at 145 is 20
GCD so far at 146 is 20
GCD so far at 147 is 20
GCD so far at 148 is 20
GCD so far at 149 is 20
GCD so far at 150 is 20
GCD so far at 151 is 20
GCD so far at 152 is 20
GCD so far at 153 is 20
GCD so far at 154 is 20
GCD so far at 155 is 20
GCD so far at 156 is 20
GCD so far at 157 is 20
GCD so far at 158 is 20
GCD so far at 159 is 20
GCD so far at 160 is 20
GCD so far at 161 is 20
GCD so far at 162 is 20
GCD so far at 163 is 20
GCD so far at 164 is 20
GCD so far at 165 is 20
GCD so far at 166 is 20
GCD so far at 167 is 20
GCD so far at 168 is 20
GCD so far at 169 is 20
GCD so far at 170 is 20
GCD so far at 171 is 20
GCD so far at 172 is 20
GCD so far at 173 is 20
GCD so far at 174 is 20
GCD so far at 175 is 20
GCD so far at 176 is 20
GCD so far at 177 is 20
GCD so far at 178 is 20
GCD so far at 179 is 20
GCD so far at 180 is 20
GCD so far at 181 is 20
GCD so far at 182 is 20
GCD so far at 183 is 20
GCD so far at 184 is 20
GCD so far at 185 is 20
GCD so far at 186 is 20
GCD so far at 187 is 20
GCD so far at 188 is 20
GCD so far at 189 is 20
GCD so far at 190 is 20
GCD so far at 191 is 20
GCD so far at 192 is 20
GCD so far at 193 is 20
GCD so far at 194 is 20
GCD so far at 195 is 20
GCD so far at 196 is 20
GCD so far at 197 is 20
GCD so far at 198 is 20
GCD so far at 199 is 20
GCD so far at 200 is 20
GCD so far at 201 is 20
GCD so far at 202 is 20
GCD so far at 203 is 20
GCD so far at 204 is 20
GCD so far at 205 is 20
GCD so far at 206 is 20
GCD so far at 207 is 20
GCD so far at 208 is 20
GCD so far at 209 is 20
GCD so far at 210 is 20
GCD so far at 211 is 20
GCD so far at 212 is 20
GCD so far at 213 is 20
GCD so far at 214 is 20
GCD so far at 215 is 20
GCD so far at 216 is 20
GCD so far at 217 is 20
GCD so far at 218 is 20
GCD so far at 219 is 20
GCD so far at 220 is 20
GCD so far at 221 is 20
GCD so far at 222 is 20
GCD so far at 223 is 20
GCD so far at 224 is 20
GCD so far at 225 is 20
GCD so far at 226 is 20
GCD so far at 227 is 20
GCD so far at 228 is 20
GCD so far at 229 is 20
GCD so far at 230 is 20
GCD so far at 231 is 20
GCD so far at 232 is 20
GCD so far at 233 is 20
GCD so far at 234 is 20
GCD so far at 235 is 20
GCD so far at 236 is 20
GCD so far at 237 is 20
GCD so far at 238 is 20
GCD so far at 239 is 20
GCD so far at 240 is 20
GCD so far at 241 is 20
GCD so far at 242 is 20
GCD so far at 243 is 20
GCD so far at 244 is 20
GCD so far at 245 is 20
GCD so far at 246 is 20
GCD so far at 247 is 20
GCD so far at 248 is 20
GCD so far at 249 is 20
GCD so far at 250 is 20
GCD so far at 251 is 20
GCD so far at 252 is 20
GCD so far at 253 is 20
GCD so far at 254 is 20
GCD so far at 255 is 20
GCD so far at 256 is 20
GCD so far at 257 is 20
GCD so far at 258 is 20
GCD so far at 259 is 20
GCD so far at 260 is 20
20
In [26]:
def primeFactors(n: int) -> None:
    """
    Prints the prime factors of n.
    """
    assert n > 0, "Only positive numbers have prime factors."
    least = 2
    while n > 1:
        f = least
        while f < n and n%f != 0:
            f = f + 1
        print(f)
        n = n // f
        least = f
        
primeFactors(4200)
2
2
2
3
5
5
7