Introduction à Pari/GP

Pari/GP est un logiciel de calcul prévu pour la théorie des nombres. Il contient énormément de fonctions pour effectuer les opérations de base en arithmétique, sur des courbes elliptiques, des fonctions L.

Le programme s’installe assez facilement sous windows, linux ou osX. Il existe également un port javascript, qui est celui que je vais utiliser dans ces pages.

Langage

Types de base

  • entiers, flottants

    a = 7
    b = 3.141592
  • Rationnels, entiers modulaires

    3/4
    Mod(7,26)
  • Polynômes

    x^7+x^2+1

Structures et manipulation

vecteur

  • c’est un tableau d’éléments quelconques, indicés à partir de 1.

    l = [ 1, x^2-x-1, 0.2 ]
    #l \\ longueur
  • affectation

    l[2] = 2/3
    l
  • création

    vector(10)
    vector(10,k,k^2)
    [1..5]
  • concaténation

    l = concat(l, [2,3,4])
  • opérations par compréhension

    l = [1..9]
    l = [ k^2 | k <- l ]

    on peut rajouter des conditions pour ne garder que certains éléments

    l = [ k | k <- l, k % 2 == 1 ]

Opérations

Les opérateurs usuels :

  • arithmétiques : +, -, *, /, ^, % pour le reste et \ pour la division entière

    Les i++ et i--, i+=2, etc. du langage C sont valides.

  • comparaisons : ==, <=, >=, !=, <, >

  • opérateurs logiques : &&, ||

Note

principe fondamental

De manière générale, les opérations sont autorisées sur des objets dès qu’elles ont une signification naturelle bien définie.

On peut en particulier écrire

[1, 3, 7, 9] + [3, 1, 4, 3]
Mod([5, 8], 15)
11/17 % 5
sqrt(Mod(-1,17))

fonctions disponibles

Il existe beaucoup de fonctions pour travailler sur les entiers, les polynômes (pol...), les matrices (préfixe mat), les corps de nombres (nf...), les courbes elliptiques (ell...), les fonctions L (lfun...)…

zetamult([2,3,4,1])
lfunzeros(1,30)

Programmation

boucles

  • boucle tant que

    n = 7; while(n>0, print(n); n-=1)
  • itération simple

    for(n=2,9, print(n^2) )
  • d’autres itérateurs existent, par exemple

    forstep(k=1,30,5,print(k))
    forprime(p=8,40,print(p))
    forvec(v=[[1,2],[5,7],[0,1]],print(v))
    forpart(p=7,print(Vec(p)))

tests

n = 4
if(issquare(n), n++)
n = if(n % 2, 3*n+1, n/2 )

fonctions

f(x) = x^2+1;

Les fonctions peuvent être récursives. Pour faire une définition sur plusieurs lignes, il est nécessaire de mettre des accolades

g(a,b) = {
  if ( b == 0,
    a,
    g( b, a % b )
    );
}