How can you tell whether a number is prime? What if the number has hundreds or thousands of digits? This question may seem abstract or irrelevant, but in fact, primality tests are performed every time we make a secure online transaction. In 2002, Agrawal, Kayal, and Saxena answered a long-standing open question in this context by presenting a deterministic test (the AKS algorithm) with polynomial running time that checks whether a number is prime or not. What is more, their methods are essentially elementary, providing us with a unique opportunity to give a complete explanation of a current mathematical breakthrough to a wide audience. Rempe-Gillen and Waldecker introduce the aspects of number theory, algorithm theory, and cryptography that are relevant for the AKS algorithm and explain in detail why and how this test works. This book is specifically designed to make the reader familiar with the background that is necessary to appreciate the AKS algorithm and begins at a level that is suitable for secondary school students, teachers, and interested amateurs. Throughout the book, the reader becomes involved in the topic by means of numerous exercises.

Provides in-depth coverage of traditional and current topics in sequential algorithms, and also gives a solid introduction to the theory of parallel and distributed algorithms reflecting the emergence of modern computing environments such as parallel computers, the Internet, cluster and grid computing.

MatLab, Third Edition is the only book that gives a full introduction to programming in MATLAB combined with an explanation of the software’s powerful functions, enabling engineers to fully exploit its extensive capabilities in solving engineering problems. The book provides a systematic, step-by-step approach, building on concepts throughout the text, facilitating easier learning. Sections on common pitfalls and programming guidelines direct students towards best practice. The book is organized into 14 chapters, starting with programming concepts such as variables, assignments, input/output, and selection statements; moves onto loops; and then solves problems using both the ‘programming concept’ and the ‘power of MATLAB’ side-by-side. In-depth coverage is given to input/output, a topic that is fundamental to many engineering applications. Vectorized Code has been made into its own chapter, in order to emphasize the importance of using MATLAB efficiently. There are also expanded examples on low-level file input functions, Graphical User Interfaces, and use of MATLAB Version R2012b; modified and new end-of-chapter exercises; improved labeling of plots; and improved standards for variable names and documentation. This book will be a valuable resource for engineers learning to program and model in MATLAB, as well as for undergraduates in engineering and science taking a course that uses (or recommends) MATLAB. Presents programming concepts and MATLAB built-in functions side-by-side Systematic, step-by-step approach, building on concepts throughout the book, facilitating easier learning Sections on common pitfalls and programming guidelines direct students towards best practice

An Active Learning Approach to Teaching the Main Ideas in Computing Explorations in Computing: An Introduction to Computer Science and Python Programming teaches computer science students how to use programming skills to explore fundamental concepts and computational approaches to solving problems. Tbook gives beginning students an introduction to computer science concepts and computer programming. Designed for CS0 and CS1 courses, it is very well suited for alternative lecture styles, including flipped classrooms. Prepares Students for Advanced Work in Computer Science A revised and updated version of the author’s Explorations in Computing: An Introduction to Computer Science, this text incorporates two major differences. It now uses Python, instead of Ruby, as the lab software so that students can seamlessly transition from introductory projects to more advanced studies in later courses. The book also introduces Python programming, providing students with sufficient programming skills so they can implement their own programs. Practical, Step-by-Step Projects The interactive lab projects in each chapter allow students to examine important ideas in computer science, particularly how algorithms offer computational solutions to problems. Students can type expressions, view results, and run experiments that help them understand the concepts in a hands-on way. Web Resources The Python software modules for each lab project are available on the author’s website. The modules include data files and sample Python code that students can copy and modify. In addition, the site provides a lab manual of installation instructions and tips for editing programs and running commands in a terminal emulator.

Randomization and probabilistic techniques play an important role in modern computer science, with applications ranging from combinatorial optimization and machine learning to communication networks and secure protocols.Assuming only an elementary background in discrete mathematics, this textbook is designed to accompany a one- or two-semester course for advanced undergraduates or beginning graduate students in computer science and applied mathematics. It gives an excellent introduction to the probabilistic techniques and paradigms used in the development of probabilistic algorithms and analyses, including random sampling, expectations, Markov's and Chevyshev's inequalities, Chernoff bounds, balls and bins models, the probabilistic method, Markov chains, MCMC, martingales, entropy, and other topics.

This book, updated and improved, introduces the mathematics that supports advanced computer programming and the analysis of algorithms. The primary aim of its well-known authors is to provide a solid and relevant base of mathematical skills--the skills needed to solve complex problems, to evaluate horrendous-looking sums, to solve complex recurrence relations, and to discover subtle patterns in data. It is an indispensable text and reference, not only for computer scientists but for all technical professionals in virtually every discipline.

There are many distinct pleasures associated with computer programming. Craftsm- ship has its quiet rewards, the satisfaction that comes from building a useful object and making it work. Excitement arrives with the ?ash of insight that cracks a previously intractable problem. The spiritual quest for elegance can turn the hacker into an artist. Therearepleasuresinparsimony,insqueezingthelastdropofperformanceoutofclever algorithms and tight coding. Thegames,puzzles,andchallengesofproblemsfrominternationalprogrammingc- petitionsareagreatwaytoexperiencethesepleasureswhileimprovingyouralgorithmic and coding skills. This book contains over 100 problems that have appeared in previous programming contests, along with discussions of the theory and ideas necessary to - tack them. Instant online grading for all of these problems is available from two WWW robot judging sites. Combining this book with a judge gives an exciting new way to challenge and improve your programming skills. This book can be used for self-study, for teaching innovative courses in algorithms and programming, and in training for international competition. To the Reader Theproblemsinthisbookhavebeenselectedfromover1,000programmingproblemsat the Universidad de Valladolid online judge, available athttp://online-judge.uva.es.The judgehasruledonwelloveronemillionsubmissionsfrom27,000registeredusersaround the world to date. We have taken only the best of the best, the most fun, exciting, and interesting problems available.

Cryptography, in particular public-key cryptography, has emerged in the last 20 years as an important discipline that is not only the subject of an enormous amount of research, but provides the foundation for information security in many applications. Standards are emerging to meet the demands for cryptographic protection in most areas of data communications. Public-key cryptographic techniques are now in widespread use, especially in the financial services industry, in the public sector, and by individuals for their personal privacy, such as in electronic mail. This Handbook will serve as a valuable reference for the novice as well as for the expert who needs a wider scope of coverage within the area of cryptography. It is a necessary and timely guide for professionals who practice the art of cryptography. The Handbook of Applied Cryptography provides a treatment that is multifunctional: It serves as an introduction to the more practical aspects of both conventional and public-key cryptography It is a valuable source of the latest techniques and algorithms for the serious practitioner It provides an integrated treatment of the field, while still presenting each major topic as a self-contained unit It provides a mathematical treatment to accompany practical discussions It contains enough abstraction to be a valuable reference for theoreticians while containing enough detail to actually allow implementation of the algorithms discussed Now in its third printing, this is the definitive cryptography reference that the novice as well as experienced developers, designers, researchers, engineers, computer scientists, and mathematicians alike will use.

Bridges the gap between theoretical and computational aspects of prime numbers Exercise sections are a goldmine of interesting examples, pointers to the literature and potential research projects Authors are well-known and highly-regarded in the field

? DoesP=NP. In just ?ve symbols Dick Karp –in 1972–captured one of the deepest and most important questions of all time. When he ?rst wrote his famous paper, I think it’s fair to say he did not know the depth and importance of his question. Now over three decades later, we know P=NP is central to our understanding of compu- tion, it is a very hard problem, and its resolution will have potentially tremendous consequences. This book is a collection of some of the most popular posts from my blog— Godel ̈ Lost Letter andP=NP—which I started in early 2009. The main thrust of the blog, especially when I started, was to explore various aspects of computational complexity around the famousP=NP question. As I published posts I branched out and covered additional material, sometimes a timely event, sometimes a fun idea, sometimes a new result, and sometimes an old result. I have always tried to make the posts readable by a wide audience, and I believe I have succeeded in doing this.

The design and analysis of efficient data structures has long been recognized as a key component of the Computer Science curriculum. Goodrich, Tomassia and Goldwasser's approach to this classic topic is based on the object-oriented paradigm as the framework of choice for the design of data structures. For each ADT presented in the text, the authors provide an associated Java interface. Concrete data structures realizing the ADTs are provided as Java classes implementing the interfaces. The Java code implementing fundamental data structures in this book is organized in a single Java package, net.datastructures. This package forms a coherent library of data structures and algorithms in Java specifically designed for educational purposes in a way that is complimentary with the Java Collections Framework.

Algorithmic Number Theory provides a thorough introduction to the design and analysisof algorithms for problems from the theory of numbers. Although not an elementary textbook, itincludes over 300 exercises with suggested solutions. Every theorem not proved in the text or leftas an exercise has a reference in the notes section that appears at the end of each chapter. Thebibliography contains over 1,750 citations to the literature. Finally, it successfully blendscomputational theory with practice by covering some of the practical aspects of algorithmimplementations.The subject of algorithmic number theory represents the marriage of number theorywith the theory of computational complexity. It may be briefly defined as finding integer solutionsto equations, or proving their non-existence, making efficient use of resources such as time andspace. Implicit in this definition is the question of how to efficiently represent the objects inquestion on a computer. The problems of algorithmic number theory are important both for theirintrinsic mathematical interest and their application to random number generation, codes forreliable and secure information transmission, computer algebra, and other areas.Publisher's Note:Volume 2 was not written. Volume 1 is, therefore, a stand-alone publication.

This book is both an easy-to-read textbook for invariant theory and a challenging research monograph that introduces a new approach to the algorithmic side of invariant theory. Students will find the book an easy introduction to this "classical and new" area of mathematics. Researchers in mathematics, symbolic computation, and computer science will get access to research ideas, hints for applications, outlines and details of algorithms, examples and problems.

This book offers an introduction to cryptology, the science that makes secure communications possible, and addresses its two complementary aspects: cryptography—--the art of making secure building blocks—--and cryptanalysis—--the art of breaking them. The text describes some of the most important systems in detail, including AES, RSA, group-based and lattice-based cryptography, signatures, hash functions, random generation, and more, providing detailed underpinnings for most of them. With regard to cryptanalysis, it presents a number of basic tools such as the differential and linear methods and lattice attacks. This text, based on lecture notes from the author’s many courses on the art of cryptography, consists of two interlinked parts. The first, modern part explains some of the basic systems used today and some attacks on them. However, a text on cryptology would not be complete without describing its rich and fascinating history. As such, the colorfully illustrated historical part interspersed throughout the text highlights selected inventions and episodes, providing a glimpse into the past of cryptology. The first sections of this book can be used as a textbook for an introductory course to computer science or mathematics students. Other sections are suitable for advanced undergraduate or graduate courses. Many exercises are included. The emphasis is on providing reasonably complete explanation of the background for some selected systems.

An absorbing account of pure and applied mathematics from the geometry of Euclid to that of Riemann, and its application in Einstein's theory of relativity. The twenty chapters cover such topics as: algebra, number theory, logic, probability, infinite sets and the foundations of mathematics, rings, matrices, transformations, groups, geometry, and topology. Mathematics was republished in 1987 with corrections and an added foreword by Martin Gardner.

Structure and Interpretation of Computer Programs has had a dramatic impact on computer science curricula over the past decade. This long-awaited revision contains changes throughout the text. There are new implementations of most of the major programming systems in the book, including the interpreters and compilers, and the authors have incorporated many small changes that reflect their experience teaching the course at MIT since the first edition was published. A new theme has been introduced that emphasizes the central role played by different approaches to dealing with time in computational models: objects with state, concurrent programming, functional programming and lazy evaluation, and nondeterministic programming. There are new example sections on higher-order procedures in graphics and on applications of stream processing in numerical programming, and many new exercises. In addition, all the programs have been reworked to run in any Scheme implementation that adheres to the IEEE standard.