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