# Okay to post homework # Ryan Badi, March 31, 2024, Homework 19 p := proc(n) local j, m: 1 + sum(trunc(trunc((n / (1 + sum(trunc((1 + (j - 1)!) / j - trunc((j - 1)! / j)), j=2..m))))^(1 / n)), m=1..2^n): end: t := proc(n) local p: return 2 + n * trunc(1 / (1 + sum(trunc((n + 2) / p) - trunc((n + 1) / p), p=2..n+1))): end: myPi := proc(n): return trunc(sum(sin((Pi * GAMMA(k)) / (2 * k))^2, k=1..n)) end: CommonKey := proc(P) local g, alicebob, bobalice, common, commonalice, commonbob: g := FindPrimi(P): alicebob := AliceToBob(P, g): bobalice := BobToAlice(P, g): commonalice := bobalice[2]&^(alicebob[1]) mod P: commonbob := alicebob[2]&^(bobalice[1]) mod P: common := g&^(alicebob[1]*bobalice[1]) mod P; end: for i from 1 to 5 do P := nextprime(rand(10^4..10^6)()): Verify(P): od: DL := proc(x, P, g) local a: if not x < 1 or x > P - 1 then: return FAIL: fi: for a from 1 to P - 1 do: if g^a = x then: return a: fi: od: return FAIL: end: