123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- \documentclass[11pt]{article}
- \usepackage{amsthm,amsmath,amsfonts,amssymb}
- \usepackage[ruled,noline,noend]{algorithm2e}
- \usepackage[margin=1in]{geometry}
- \usepackage{enumerate}
- %%% Update the following commands with your name, ID, and acknowledgments.
- \newcommand{\YourName}{Tareef Dedhar}
- \newcommand{\YourStudentID}{20621325}
- \newcommand{\YourAck}{I have completed this question with no outside sources.}
- \newenvironment{solution}{\paragraph{Solution.}}{}
- \title{
- \vspace{-0.8in} \normalsize
- \begin{flushright} \YourName \\ \YourStudentID \end{flushright}
- \rule{\textwidth}{.5pt}\\[0.4cm] \huge Assignment 1: Question 3 \\
- \rule{\textwidth}{2pt}
- \vspace{-1in}
- }
- \date{}
- \begin{document}
- \maketitle
- \paragraph{Acknowledgments.} \YourAck
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- \section*{Testing primality [10 marks]}
- Analyze the time complexity of the following pseudocode in terms of $n$
- using big-$O$ notation.
- For this analysis, each operation on integers (including multiplication and squaring) takes constant time.
- \begin{algorithm}
- \caption{{\sc IsPrime($n$)}}
- $j \gets 2$\;
- \While{$j^2 \le n$}{
- $k \gets 2$\;
- \While{$j * k \le n$}{
- \If{$j * k = n$}{
- \Return False\;
- }
- $k \gets k+1$\;
- }
- $j \gets j+1$\;
- }
- \Return True\;
- \end{algorithm}
- \begin{solution}
- We shall analyze the algorithm in order, by scope blocks. First, we assign j the initial value of 2. This takes constant time. Then, we have a loop. This loop iterates on j, and if we reduce ${j^2} \leq n$ to $j \leq \sqrt{n}$, and notice that j increments one at a time, we can see this loop will iterate $\sqrt{n}$ times in the worst case.
- As for what we are doing $\sqrt{n}$ times, we have another loop, from k=2 to j*k$\leq$n (by 1 each time) in the worst case. Since j is at least 2, in the worst case, this loop will iterate n/2 times. This loop performs an if check and multiplication, which are constant time operations, so the inner loop is O(n).
- So, since we are looping $\sqrt{n}$ times, and in each of those loops entering another loop of O(n), our total worst-case runtime is O($n\sqrt{n}$).
- \end{solution}
- \end{document}
|