Advertisement
kkricardokaka95

Quiz 2

Mar 17th, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.20 KB | None | 0 0
  1. # Written by *** and Eric Martin for COMP9021
  2.  
  3.  
  4. '''
  5. Prompts the user for two strictly positive integers, numerator and denominator.
  6.  
  7. Determines whether the decimal expansion of numerator / denominator is finite or infinite.
  8.  
  9. Then computes integral_part, sigma and tau such that numerator / denominator is of the form
  10. integral_part . sigma tau tau tau ...
  11. where integral_part in an integer, sigma and tau are (possibly empty) strings of digits,
  12. and sigma and tau are as short as possible.
  13. '''
  14.  
  15.  
  16. import sys
  17. from math import gcd
  18.  
  19.  
  20. try:
  21.     numerator, denominator = input('Enter two strictly positive integers: ').split()
  22. except ValueError:
  23.     print('Incorrect input, giving up.')
  24.     sys.exit()
  25. try:
  26.     numerator, denominator = int(numerator), int(denominator)
  27.     if numerator <= 0 or denominator <= 0:
  28.         raise ValueError
  29. except ValueError:
  30.     print('Incorrect input, giving up.')
  31.     sys.exit()
  32.  
  33. has_finite_expansion = False
  34. integral_part = 0
  35. sigma = ''
  36. tau = ''    
  37.  
  38. gcd_num_den = gcd(numerator,denominator)
  39. numerator//= gcd_num_den
  40. denominator//= gcd_num_den
  41.  
  42. integral_part = numerator//denominator
  43.  
  44. def find_prime_factors(denominator):
  45.     prime_factors = []
  46.     factor = 2
  47.     if denominator == 1:
  48.         return
  49.     while denominator>1:
  50.         if denominator%factor == 0:
  51.             denominator =  denominator/factor
  52.             prime_factors.append(factor)
  53.         else:
  54.             factor =  factor + 1
  55.     return prime_factors        
  56.  
  57. def finite_or_infinite(denominator):
  58.    
  59.     if denominator == 1:
  60.         return True
  61.     L = find_prime_factors(denominator)
  62.     for i in L:
  63.         if i != 2:
  64.             if i!=5:
  65.                 return False
  66.     return True
  67.  
  68. has_finite_expansion = finite_or_infinite(denominator)
  69.  
  70. def find_sigma_tau(numerator, denominator):
  71.     list_of_remainders = []
  72.     flag = True
  73.     quotient = []
  74.     #quotient = numerator/denominator
  75.     #quotient -= numerator//denominator
  76.     while flag:
  77.         if numerator%denominator == 0:
  78.             flag = False
  79.             break
  80.         else:
  81.             remainder = numerator%denominator
  82.             #print(numerator, denominator, remainder)
  83.             #print("list ", list_of_remainders)
  84.             for element in list_of_remainders:
  85.                 #print(element)
  86.                 if element == remainder:
  87.                     flag = False
  88.             #if not flag:
  89.                 #print(remainder)
  90.                # continue
  91.             list_of_remainders.append(remainder)
  92.             quotient.append((numerator-remainder)/denominator)
  93.             numerator = numerator * 10
  94.             #print(numerator/denominator)
  95.             #counter+=1
  96.             #if counter>5:
  97.             #    break
  98.    
  99.     #print(quotient)
  100.     #print(remainder)
  101.     print(quotient)
  102.     print(list_of_remainders)  
  103.     '''quotient = str(quotient)
  104.    sigma = []
  105.    tau = []
  106.    #quotients = get_quotients(numerator, denominator, remainder)
  107.    #accidentally printed remainders. Not what we want
  108.    i = 2
  109.    for value in list_of_remainders:
  110.       ''' '''if list_of_remainders[index] == remainder:
  111.            sigma = list_of_remainders[0:index]
  112.            tau = list_of_remainders[index:]
  113.            break''''''
  114.        if value!=remainder:
  115.            sigma.append(quotient[i])
  116.            #print(sigma)    
  117.            i+=1
  118.        else:    
  119.            tau.append(quotient[i])
  120.            i+=1
  121.    print(sigma, tau)  '''    
  122.          
  123.  
  124. '''def get_quotients(numerator, denominator, remainder):
  125.    flag = True
  126.    quotients = []
  127.    while Flag:
  128.        quotient = numerator//denominator'''
  129.  
  130. find_sigma_tau(numerator, denominator)
  131.  
  132. if has_finite_expansion:
  133.     print(f'\n{numerator*gcd_num_den} / {denominator*gcd_num_den} has a finite expansion')
  134. else:
  135.     print(f'\n{numerator*gcd_num_den} / {denominator*gcd_num_den} has no finite expansion')
  136. if not tau:
  137.     if not sigma:
  138.         print(f'{numerator*gcd_num_den} / {denominator*gcd_num_den} = {integral_part}')
  139.     else:
  140.         print(f'{numerator*gcd_num_den} / {denominator*gcd_num_den} = {integral_part}.{sigma}')
  141. else:
  142.     print(f'{numerator*gcd_num_den} / {denominator*gcd_num_den} = {integral_part}.{sigma}({tau})*')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement