diff --git a/assignments/a4/a4_test.py b/assignments/a4/a4_test.py new file mode 100644 index 0000000..d5f4983 --- /dev/null +++ b/assignments/a4/a4_test.py @@ -0,0 +1,62 @@ +import math + +import numpy as np +from matplotlib import pyplot as plt + +from assignments.a4.a4_part2 import starting_coprime_numbers + + +def plot_eq(f, lower, upper, step=0.1): + x_p = list(np.arange(lower, upper, step=step)) + y_p = [f(x) for x in x_p] + plt.plot(x_p, y_p, color='#ffcccc') + + +# Initialize a list +primes = [] +for possiblePrime in range(2, 1000): + + # Assume number is prime until shown it is not. + isPrime = True + for num in range(2, possiblePrime): + if possiblePrime % num == 0: + isPrime = False + + if isPrime: + primes.append(possiblePrime) + + +def coprime_to_all(primes: set[int], n: int) -> int: + """Return the positive integers less than n that are coprime to every number in primes. + + Preconditions: + - primes != set() + - every element of primes is prime + - n >= math.prod(primes) + """ + m = math.prod(primes) + nums_so_far = starting_coprime_numbers(primes) + phi = len(nums_so_far) + count = 0 + while nums_so_far[-phi] + m < n: + next_number = nums_so_far[-phi] + m + list.append(nums_so_far, next_number) + count += 1 + + # print('m =', m) + # print('phi(m) =', phi) + # print('n * phi(m) / m =', n * phi / m) + # print('n * phi(m) / m - phi(m) =', n * phi / m - phi) + # print('count =', count) + + return count + + +if __name__ == '__main__': + x = primes + plt.plot(x, [coprime_to_all({a}, 2000) for a in x], label='count') + plt.plot(x, [2000 - a for a in x], label='count') + + plt.ylabel('loop count') + plt.xlabel('m') + plt.show()