CS 111 - Introduction to Computer Science
Homework #9


Due: Friday 3/31 at the beginning of class

1. Divisors:  In a class Divisors.java, read in a maximum integer n and use nested loops to print a list of divisors for each of 1 through n as shown in the following transcript.
Sample transcript (input underlined):

Largest integer? 100
1: 1
2: 1 2
3: 1 3
4: 1 2 4

...

95: 1 5 19 95
96: 1 2 3 4 6 8 12 16 24 32 48 96
97: 1 97
98: 1 2 7 14 49 98
99: 1 3 9 11 33 99
100: 1 2 4 5 10 20 25 50 100

2. Greatest Common Divisor:  In a class GCD.java, read in two integers a and b.  Compute and print their greatest common divisor (GCD) using the Euclidean algorithm.   The Euclidean algorithm is simply described as follow:  While b is nonzero,  set a' to b and set b' to (a modulus b), where a' and b' are the new values of a and b for the next iteration.  Hint: One can accomplish this using only three variables: a, b, and one temporary variable for storage. Input/output should be as shown in the following transcript.

Sample transcript (input underlined):

Integer a? 504
Integer b? 2226
Greatest common divisor of a and b: 42

Have the computation of the greatest common divisor take place in a public static method gcd that takes in integers a and b as parameters and returns the integer greatest common divisor of a and b.  Your main method should perform input and output (I/O) and call this method to perform the computation.

3. Magic Square:  Create a class MagicSquare that prompts the user for a positive odd integer size, generates a normal magic square of order size, and prints it with numbers right-justified and aligned in evenly-spaced columns. You may assume the numbers in the square are 3 digits or less (i.e. size ≤ 31).  However, each space-separated column should have a width equal to the largest integer in the magic square.  (See example transcripts below.)

To generate the magic square, use the following algorithm:  Assign 1 to our initial current position: the bottom row, middle column.  Place each successive value (up to size * size) in the first of the following positions that is unoccupied: (1) one space down and to the right, or (2) one space up.  Positions wrap around the sides, top and bottom, as shown in the following example transcripts (user input underlined):

Please enter a positive odd integer: 3
4 9 2
3 5 7
8 1 6

Please enter a positive odd integer: 5
11 18 25  2  9
10 12 19 21  3
 4  6 13 20 22
23  5  7 14 16
17 24  1  8 15

Please enter a positive odd integer: 19
172 193 214 235 256 277 298 319 340 361   2  23  44  65  86 107 128 149 170
171 173 194 215 236 257 278 299 320 341 343   3  24  45  66  87 108 129 150
151 153 174 195 216 237 258 279 300 321 342 344   4  25  46  67  88 109 130
131 152 154 175 196 217 238 259 280 301 322 324 345   5  26  47  68  89 110
111 132 134 155 176 197 218 239 260 281 302 323 325 346   6  27  48  69  90
 91 112 133 135 156 177 198 219 240 261 282 303 305 326 347   7  28  49  70
 71  92 113 115 136 157 178 199 220 241 262 283 304 306 327 348   8  29  50
 51  72  93 114 116 137 158 179 200 221 242 263 284 286 307 328 349   9  30
 31  52  73  94  96 117 138 159 180 201 222 243 264 285 287 308 329 350  10
 11  32  53  74  95  97 118 139 160 181 202 223 244 265 267 288 309 330 351
352  12  33  54  75  77  98 119 140 161 182 203 224 245 266 268 289 310 331
332 353  13  34  55  76  78  99 120 141 162 183 204 225 246 248 269 290 311
312 333 354  14  35  56  58  79 100 121 142 163 184 205 226 247 249 270 291
292 313 334 355  15  36  57  59  80 101 122 143 164 185 206 227 229 250 271
272 293 314 335 356  16  37  39  60  81 102 123 144 165 186 207 228 230 251
252 273 294 315 336 357  17  38  40  61  82 103 124 145 166 187 208 210 231
232 253 274 295 316 337 358  18  20  41  62  83 104 125 146 167 188 209 211
212 233 254 275 296 317 338 359  19  21  42  63  84 105 126 147 168 189 191
192 213 234 255 276 297 318 339 360   1  22  43  64  85 106 127 148 169 190

Have the construction of the 2D integer array magic square take place in a public static method getMagicSquare that takes in an integer n as a parameter and returns the 2D integer array magic square as specified.  Your main method should perform input and output (I/O) and call this method to perform the computation.