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èreLes
i++
eti--
,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 ) ); }