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
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
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:
print(2 ** 150)
1427247692705959881058285969449495136382746624
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
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
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
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
print(factorial(500))
print(factorial(500.0))
<cell>2: error: Argument 1 to "factorial" has incompatible type "float"; expected "int" [arg-type]
1220136825991110068701238785423046926253574342803192842192413588385845373153881997605496447502203281863013616477148203584163378722078177200480785205159329285477907571939330603772960859086270429174547882424912726344305670173270769461062802310452644218878789465754777149863494367781037644274033827365397471386477878495438489595537537990423241061271326984327745715546309977202781014561081188373709531016356324432987029563896628911658974769572087926928871281780070265174507768410719624390394322536422605234945850129918571501248706961568141625359056693423813008856249246891564126775654481886506593847951775360894005745238940335798476363944905313062323749066445048824665075946735862074637925184200459369692981022263971952597190945217823331756934581508552332820762820023402626907898342451712006207714640979456116127629145951237229913340169552363850942885592018727433795173014586357570828355780158735432768888680120399882384702151467605445407663535984174430480128938313896881639487469658817504506926365338175055478128640000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 inf
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
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
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
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