# The Pari Package On Linux

In addition to the standard mathematical operations +, -, *, and /, you find transcendental and number theoretical functions, functions dealing with elliptic curves, number fields, polynomials, power series, linear algebra, sums, and products, as well as functions for plotting.

For example, you can factor numbers and polynomials:

? factor(249458089531) %9 = [7 2] [48611 1] [104729 1]

meaning 249458089531=72*48611*104729, or

? factor(t^3+t^2-2*t-2) %10 = [t + 1 1] [t^2 - 2 1]

meaning *t3+t2-2*t-2=(t+1)*(t2-2)*, where
*t2-2* cannot be factored further using rational
coefficients. It is only possible to factor polynomials in one
indeterminate.

To solve a linear equation *x=3*y,
y=2*x-1* (using the gauss method), you rewrite it as
*x-3*y=0*, *-2*x+y=-1*, take
the coefficient matrix A, the right side b and compute

? A=[1,-3;-2,1] %11 = [1 -3] [-2 1] ? b=[0;-1] %12 = [0] [-1] ? gauss(A,b) %13 = [3/5] [1/5]

giving you the result x=3/5, y=1/5.

To determine the roots of a polynomial you may just enter roots:

? \precision=4 precision = 4 significant digits :? roots(t^3+t^2-2*t-2) %14 = [-1.414 + 0.0000*i, -1.000 + 0.0000*i, 1.414 + 0.0000*i]~

Plotting gives you a quick overview of a function even in text-mode; see Figure 1. For plotting to a separate X11-window, enter:

? ploth(x=-pi,pi,sin(x))

**Figure 1. A
Function Plot in Text Mode**

Instead, to get the graph in Figure 2, enter:

? plot(x=-pi,pi,sin(x))

The gp commands may be classified into expressions (which are
evaluated immediately), function definitions, meta-commands, and
help. Via the ? key, you obtain help for the meta-commands
controlling gp as well as for each of the built-in functions. The
meta-commands allow you to control the way of printing pari results
as well as reading and writing from or to a file. **\w
<filename>** saves your complete session (from
starting gp up to issuing this command) to a file, **\r
<filename>** does the reverse job, reading the
session, bringing you to (or returning you to) the exact state that
you previously saved. Other useful features include the writing of
expressions in TeX/LaTeX format (via **texprint**)
and switching the printing of timing information by the # command.
You may also of course run gp as a batch job using standard I/O
redirection. You span input over several lines by using the \
continuation character.

Defining your own functions in gp is quite simple. As an example, cube returns the third power of its argument:

? cube(x)=x*x*x ? cube(3) %15 = 27 ? cube(t+1) %16 = t^3 + 3*t^2 + 3*t + 1

You can use control structures as **if, while,
until**, for (there are some special variants),
**goto** and **label** as well as
functions for printing or clearing variables. Though pari already
provides a function **fibo**, let us try to program
a function for the Fibonacci sequence. This sequence is defined by
*f0=1, f1=1, fn=fn-1+fn-2* for
*n>=2*, yielding *f2=1+1=2,
f3=2+1=3, f4=5,..*. The (probably) shortest such function
uses recursion. Here you need the **if** expression
to test for the special cases *f0=1* and
*f1=1*. **if(a,seq1,seq2)**
evaluates **seq1** if a is nonzero and
**seq2** otherwise:

?fib(n)=if(n==0,1,\ if(n==1,1,fib(n-1)+fib(n-2))) ? fib(5) %17 = 8

For small *n* this is okay. A faster way
is to compute the Fibonacci numbers by iteration. In each step the
new value *h=fn* is computed as the sum of the
last two values *g=fn-1* and
*f=fn-2*, and afterwards these values are
exchanged. For this you need variables **f, g, h**,
and **m** (counter). To avoid conflicts with
variables defined outside the function, these four are declared as
local by writing them at the end of the parameter list. The
**for(x=a,b,seq)** expression evaluates
**seq** for each value of *x*
running from **a** to **b**.
Expressions separated by a semicolon ; form a sequence, and a
sequence's value is always that of its last expression:

? fib2(n, m,f,g,h)= f=1; g=1; \ for(m=2, n, h=f+g; f=g; g=h); g ? fib2(5) %18 = 8

## Trending Topics

## Webinar

### Fast/Flexible Linux OS Recovery

On Demand Now

In this live one-hour webinar, learn how to enhance your existing backup strategies for complete disaster recovery preparedness using Storix System Backup Administrator (SBAdmin), a highly flexible full-system recovery solution for UNIX and Linux systems.

Join *Linux Journal*'s Shawn Powers and David Huffman, President/CEO, Storix, Inc.

Free to *Linux Journal* readers.

Ubuntu Online Summit | May 05, 2016 |

The Qt Company's Qt Start-Up | May 04, 2016 |

Devuan Beta Release | May 03, 2016 |

May 2016 Issue of Linux Journal | May 02, 2016 |

May 2016 Video Preview | May 02, 2016 |

BitTorrent Inc.'s Sync | Apr 29, 2016 |

- Ubuntu Online Summit
- Devuan Beta Release
- The Qt Company's Qt Start-Up
- Download "Linux Management with Red Hat Satellite: Measuring Business Impact and ROI"
- The US Government and Open-Source Software
- May 2016 Issue of Linux Journal
- The Death of RoboVM
- Open-Source Project Secretly Funded by CIA
- New Container Image Standard Promises More Portable Apps
- BitTorrent Inc.'s Sync

## Geek Guides

In modern computer systems, privacy and security are mandatory. However, connections from the outside over public networks automatically imply risks. One easily available solution to avoid eavesdroppers’ attempts is SSH. But, its wide adoption during the past 21 years has made it a target for attackers, so hardening your system properly is a must.

Additionally, in highly regulated markets, you must comply with specific operational requirements, proving that you conform to standards and even that you have included new mandatory authentication methods, such as two-factor authentication. In this ebook, I discuss SSH and how to configure and manage it to guarantee that your network is safe, your data is secure and that you comply with relevant regulations.

Get the Guide