- June 6, 2020

CS 352 : MIPS & Amicable Numbers 1 MARS You will be using the MIPS Assembler and Runtime Simulator (MARS) for this lab assignment. Download: http://courses.missouristate.edu/KenVollmar/mars/download.htm Here is a sample Fibonacci (fibonacci.asm) program to familiarize yourself with the MARS environment. 2 Description In number theory, classifications can be given to numbers, such as perfect, amicable, and sublime. For this project, you are required to compute pairs of amicable numbers. 3 Definitions Proper divisors: A number m is said to be a proper divisor of another number n if there exists a whole number k such that n = mk, and where k is ≠ 1. In other words, the proper divisors of n are all whole numbers from 1 to n-1 that divide evenly into n. For example, the proper divisors of 10 are: 1,2, and 5. Perfect Numbers: A number is said to be a perfect number if the sum of its proper divisors is equal to the number. As an example, the proper divisors of 6 are: 1, 2, 3. When you sum these together, you get 6. (There is no need to calculate perfectness for this project) Original number: 6 Proper divisors: 1, 2, 3 Sum of proper divisors: 1 + 2 + 3 = 6 (original number) Amicable Numbers: Given two numbers, if the sum of the proper divisors of the 1st number is equal to the 2nd number and the sum of the proper divisors of the 2nd number is equal to the 1st number, the two are considered amicable numbers. As an example, 220 and 284 are amicable numbers. The proper divisors of 220 (the 1st number) are: 1, 2, 4, 5, 10, 11, 20, 22, 44, 55, 110 When you sum these together you get 284 – the 2nd number. The proper divisors of 284 (the 2nd number) are: 1, 2, 3, 71, and 142 If you add these up you get 220 – the 1st number. 1st number: 220 Divisors of 1st number: 1, 2, 4, 5, 10, 11, 20, 22, 44, 55, 110 Sum of divisors: 284 (2nd number) 2nd number: 284 Divisors of 2nd number: 1, 2, 3, 71, 142 Sum of divisors: 220 (1st number) Sublime Numbers (not implemented – just for fun): A number is said to be a sublime number if the sum and number of its divisors are both perfect. For example, 12 is sublime. The number 12 has 6 divisors ( 1 2 3 4 6 12). The sum of these divisors is 28. Both the number of divisors (6) and the sum of these divisors (28) are perfect numbers. Therefore, 12 is sublime. (There is no need to calculate sublimeness for this project) 4 The Problem: You are to write a MIPS program that: • inputs a range of values to process. • finds any pairs of amicable numbers in that range and outputs them in ascending order. • continues to run until you input a value that is out of range. 5 Project Code Requirements (READ CAREFULLY) Besides the functionality requirements for the project, there are the following graded requirements on your code: • You must use functions. You must have the following functions: isFactor, and isAmicable. You may create other functions as you deem appropriate. • You must comment your code adequately and follow basic style guidelines such as proper indentation of code. A small comment at the start of each function definition about what it does is considered good practice. 6 The Input: 1st Prompt You will input the range of numbers as two values on separate lines at separate prompts. The 1st prompt should be: Input the start of the range: xxxxx where xxxxx is your integer value and will be a valid integer. When to Quit If the user inputs a non-positive number (zero or negative) then you are to print the following error message: Unable to check non-positive values Exiting…… and exit the program without producing any further output. 2nd Prompt The 2nd prompt, for the end of the range, should be: Input the end of the range: yyyyy Again, yyyyy is a valid integer. If the value is non-positive, then you should output the same message as in the first case and exit the program without producing any further output. Start > End If the 2nd number is less than the first number you should print a message: End of range < start of range -- swapping values And swap or exchange the two values to correct the problem. 7 Output: Amicable Numbers Output (see sample run below) If you find a pair of amicable numbers you should output: uuuuu and wwwww are amicable numbers where uuuuu and wwwww are the two amicable numbers in ascending order and are printed as integers with no decimal point. Stats Output Upon completion of the program, in this case, you should print a message giving the total number of amicable numbers found in the form: Range of numbers: xxxxx - yyyyy Pairs of amicable numbers = zzz ----- 8 Sample Run: Input the start of the range: 1 Input the end of the range: 300 220 and 284 are amicable numbers Range of numbers: 1 - 300 Pairs of amicable numbers = 1 ----- Input the start of the range: 1250 Input the end of the range: 1 End of range < start of range -- swapping values 220 and 284 are amicable numbers 1184 and 1210 are amicable numbers Range of numbers: 1 - 1250 Pairs of amicable numbers = 2 ----- Input the start of the range: -10 Unable to check non-positive values Exiting …… 9 Testing You will want to consider the following before submission: • Your program detects amicable numbers correctly. • The amicable number pairs are NOT listed twice. • Your program exits gracefully. 10 Grading Rubric Correctness 50% Stress Tests (large data sets) 20% Efficiency (fast execution time) 20% Specifications Compliant 10% 11 Submission Requirements The code should be in a file named yourname_amicable.asm and submitted to the W: drive folder by 11:00am on the due date. A hardcopy must be submitted in class along with a sample run. 12 Some amicable numbers (for testing purposes): 1 220 284 2 1184 1210 3 2620 2924 4 5020 5564 5 6232 6368 6 10744 10856 7 12285 14595 8 17296 18416 9 63020 76084 10 66928 66992 11 67095 71145 12 69615 87633 13 79750 88730 14 100485 124155 15 122265 139815 16 122368 123152 17 141664 153176 18 142310 168730 19 171856 176336 20 176272 180848 21 185368 203432 22 196724 202444 23 280540 365084 24 308620 389924 25 319550 430402 26 356408 399592 27 437456 455344 28 469028 486178 29 503056 514736 30 522405 525915 31 600392 669688 32 609928 686072 33 624184 691256 34 635624 712216 35 643336 652664 36 667964 783556 37 726104 796696 38 802725 863835 39 879712 901424 40 898216 980984