### Creating objects with overloaded operators allows you to use the object like a built in data type. In this lab, you will create a fraction class. By overloading its operators, you can easily use your class to solve mathematical problems related to fractions.

**Part 1: Complete Fraction Class**

Complete the implementation of the Fraction class provided below.

`class Fraction:`

#Constructor. Puts fraction in simplest form

def __init__(self,a,b):

self.num = a

self.den = b

self.simplify()

#Print Fraction as a String

def __str__(self):

if self.den==1:

return str(self.num)

else:

return str(self.num)+"https://www.sweetstudy.com/"+str(self.den)

#Get the Numerator

def getNum(self):

return self.num

#Get the Denominator

def getDen(self):

return self.den

#Give Numerical Approximation of Fraction

def approximate(self):

return self.num/self.den

#Simplify fraction

def simplify(self):

x = self.gcd(self.num,self.den)

self.num = self.num // x

self.den = self.den // x

#Find the GCD of a and b

def gcd(self,a,b):

if b==0:

return a

else:

return self.gcd(b,a % b)

#Complete these methods in lab

def __add__(self,other):

return 0

def __sub__(self,other):

return 0

def __mul__(self,other):

return 0

def __truediv__(self,other):

return 0

def __pow__(self,exp):

return 0

Complete Implementation of the following methods. All of these methods will return an instance of the Fraction class.

**Part 2: Fraction Problems**

Create a file **lab3.py**. In this file, use your fraction class to implement functions for each of the following formula. You program should ask the user for the value of **n** to use in the summations.

Remember that a summation symbol just tells you to add all the values in a range.

Write functions for each of the below expressions.

- Harmonic Series:
- Two:
- Zero:
- Partial Riemann Zeta:

Your program will ask for n as input. Compute each of the functions for the given input n. When computing the Riemann Zeta function, print values for b=2,3,4,5,6,7,8.

Verify that the input is a valid number. If it is not, ask repeatedly until a valid number is given.

Once you have been given a valid input, print out the values of each of the functions in the order H, T, Z, R. See below execution trace for exact layout.

**Scoring**

- Part 1
- 6pts – Add
- 6pts – Subtract
- 6pts – Multiply
- 6pts – True Divide
- 6pts – Power

- Part 2
- 10pts – H Function
- 10pts – T Function
- 10pts – Z Function
- 10pts – R Function

**Example Execution Trace**

`Welcome to Fun with Fractions!`

Enter Number of iterations (integer>0):

Bad Input

Enter Number of iterations (integer>0):

10

H(10)=7381/2520

H(10)~=2.92896825

T(10)=2047/1024

T(10)~=1.99902344

Z(10)=1/1024

Z(10)~=0.00097656

R(10,2)=1968329/1270080

R(10,2)~=1.54976773

R(10,3)=19164113947/16003008000

R(10,3)~=1.19753199

R(10,4)=43635917056897/40327580160000

R(10,4)~=1.08203658

R(10,5)=105376229094957931/101625502003200000

R(10,5)~=1.03690734

R(10,6)=52107472322919827957/51219253009612800000

R(10,6)~=1.01734151

R(10,7)=650750820166709327386387/645362587921121280000000

R(10,7)~=1.00834915

R(10,8)=1632944765723715465050248417/1626313721561225625600000000

R(10,8)~=1.00407735