Cipher 1 - Modular Arithmetic

Mail: ccollins@math.utk.eduPreliminariesStart MATLAB (from Start Menu). Arrange your windows so you can see MATLAB and this webpage.Mod ArithmeticIn MATLAB you can do mod-arithmetic by using themodcommand. Type help mod to learn more about this command. Suppose you want to compute various things mod-27, then you would compute 4928 as mod(4928,27) 22+19 as mod(22+19,27) 4*16 as mod(4*16,27) 86-123 as mod(86-123,27) -12 as mod(-12,27)Mod InversesTo compute additive inverses, there are two obvious methods. First, since 0=27 (mod 27), the additive inverse of a numberxis the numberysuch thatx + y = 27. Thusy = 27 - x. The second way is to use mod(-x,27). The second way works even ifxis not in the range 0-26. Computing multiplicative inverses is more challenging. There is an algorithm that can be used to find the multiplicative inverse, but it is pretty complicated (It is based on the Euclid's Algorithm, which is a way of finding the GCD of 2 numbers). The easiest way (in MATLAB) to find mult. inverses is by exhaustion. Try the following: x = 4 the number you want to find the inverse of num = [1:26] all the numbers from 1 to 26 res = mod(x*num,27) result of x*(1,...,26) mod 27 find(res==1) this finds which value gives an answer of 1 find will either produce a number (the inverse) or will result in "ans = []" meaning there is no inverse.Alpha -> Numeric -> AlphaTo convert from letters to numbers and back we need to use 3 different commandsupper,realandchar. Try the following: P = 'your name' P = upper(P) cP = real(P) Note how the result is a list of numbers between 65 and 90, with 32s for the spaces. If you then subtract 64, the result is only numbers in the range 1-26, plus negative numbers for the spaces (and punctuation). Try the following: cP = cP - 64 ind = find(cP<0) this finds where non-letters were cP(ind) = 0 and replaces them with 0 Now to convert back, try the following: xP = [3 8 21 3 11 0 3 15 12 12 9 14 19]; ind = find(xP==0); xP = xP + 64; xP(ind) = 32; replace all noncharacters with spaces char(xP) Now convert the coded version of your name (incP) back to text.Automating the ProcessYou can put all the commands to go from text to numbers and from numbers back to text into a file (called an M-file) and then run it from MATLAB. Go to the "File" menu and choose "New -> M-file". This will pop-up a new window. Starting with "P = upper(P)", put all the commands you typed above to convert from text to numbers in this file. (You can copy and paste if you want). Now save this file as "code1.m". When you run this program it will use whatever value you have set forP. In the original MATLAB window (command window), type "code1" and see what happens. If you get some error message, try to figure out what correction you need to make. Change P to another string of characters and type "code", like P = 'I like math more than TV' code1 Repeat this process with the commands to convert from numbers back to text and call this file "decode1.m" Try converting messages back and forth from text to numbers and back. If you get really frustrated, look at the end of this file.Put It All TogetherUse what you have done here to do the homework. Hints/Suggestions: to keep the clutter down you should put semi-colons at the end of each statement you can create a new M-file which callscode1and/ordecode1these M-files are called scripts, you can also make functions, use help function or see Lab 2 for more information The coded messages are: BHPPETUBDLPGFYBNQMFTBTMBSHFBTQPTTJCMF JTJOEJTQFOTBCMFGPS BUIPSPVHIVOEFSTUBO EJOHPGBOZDPODFQUBOEXIFOJXBOUUPMFBSOTP NFUIJOHOFXJNBLFJUNZGJSTUKPCUPCVJMEPOF QBVMIBMNPT WTZRZIGHXERPHUTXOSPWTZSPWIUGTXQZAZRPE GWRPUWQTIUTSPVHXWG XSZJPVEZPMMCIZJWXW TZMTZHXSZHPXOWTZRZPCQXRCJHIUXCPICXEPU TZAGNV YWARBGPVGYBXOVUCAVGPUIFKEZGUZIWQVHVW ESGGYGLQFUIGKWYKEQ WOGGLQFUIWARUYREIG EAIROAGKAUWEAIUYWXAEBWAVGBWAROEUCCGIE CGIARFGZIUXYKCUIGLQFUIRYZAVGXYJYUPYPW FAGIBGHGI ---------------------------------SOLUTIONS------------------------------- To use these, select all the lines in green, copy them, and paste them into the M-file editor window. Save and run.SCRIPT 1 code1.m% code1.m by Dr. Collins 6/19/01 for GSS:Math P = upper(P); cP = real(P); cP = cP - 64; ind = find(cP<0); cp(ind) = 0; disp(cP)SCRIPT 2 decode1.m% decode1.m by Dr. Collins 6/19/01 for GSS:Math ind = find(cP==0); cP = cP + 64; cP(ind) = 32; char(cP)