La bibliothèque BigInt (basée sur LargeInt de S. J. Schaper) permet de réaliser des calculs sur de grands nombres entiers.
La fonction BigInit(n%)
initialise la bibliothèque. Le paramètre n
représente le nombre d'entiers que l'on veut utiliser. La fonction retourne le nombre de chiffres maximum de chaque entier.
P. ex. l'instruction :
p = BigInit(100)
permet de réserver 100 entiers pouvant avoir jusqu'à p
= 4176 chiffres chacun.
Le nombre maximal de chiffres pour un seul entier, soit BigInit(1)
, est d'environ 73000.
Les entiers sont stockés dans un tableau. On accède à chaque entier par le biais de son indice qui peut aller de 0 à n - 1
.
Dans la suite, nous désignerons par (i)
l'entier d'indice i
.
Pour affecter une valeur à un grand entier on dispose de 3 procédures :
SetNum i%, n%
: affecte à l'entier (i)
la valeur de n
(entier 32 bits)
SetNum 0, 123456789
SetStr i%, a$
: affecte à l'entier (i)
le nombre représenté par la chaîne de caractères a
. On peut utiliser un nombre hexadécimal à condition de le préfixer par &H
ou &h
SetStr 1, "12345678901234567890"
SetStr 2, "&h123456789ABCDEF"
SetRnd i%, n%
: affecte à l'entier (i)
un nombre aléatoire de (exactement) n
bits allant de 2^(n - 1)
à (2^n - 1)
SetRnd 3, 128
La fonction GetStr(i%)
retourne la valeur décimale de l'entier (i)
dans une chaîne de caractères.
BigDup i%, j%
: Copie (i)
dans (j)
BigSwap i%, j%
: Echange (i)
et (j)
BigCmp(i%, j%)
: Compare (i)
et (j)
Retourne -1 si (i)
< (j)
, 0 si (i)
= (j)
, 1 si (i)
> (j)
BigIsf(i%, n%)
: Retourne -1 si (i)
= n
, 0 sinon.
n
est un entier de 16 bits (-32768 à 32767)
BigInc i%, n%
: Augmente (i)
de n
, où n
est un entier de 16 bits
BigAdd i%, j%, k%
: Somme (i)
+ (j)
. Résultat dans (k)
BigSub i%, j%, k%
: Différence (i)
- (j)
. Résultat dans (k)
BigMul i%, j%, k%
: Produit (i)
* (j)
. Résultat dans (k)
BigDiv i%, j%, k%, m%
: Division entière de (i)
par (j)
. Place le quotient dans (k)
et le reste dans (m)
BigRat(i%, j%, n%)
: Approximation décimale du rapport (i)
/ (j)
. Résultat sous forme de chaîne de caractères.
BigChs i%
: Change le signe de (i)
BigSqr i%, k%
: (i)
au carré. Résultat dans (k)
BigSqrt(i%, k%)
: Si (i)
est un carré parfait, retourne 0 et la racine carrée de (i)
dans (k)
sinon retourne -1.
BigPow i%, n%, k%
: (i)
à la puissance n
. Résultat dans (k)
. n
est un entier positif de 32 bits
BigFact n%, k%
: Factorielle de n
. Résultat dans (k)
. n
est un entier positif pouvant aller jusqu'à environ 19000 si l'on a réservé un seul entier, soit BigInit(1)
.
BigShl i%, n%, k%
: (i)
est décalé de n
bits vers la gauche. Ceci correspond à une multiplication par 2^n
. Résultat dans (k)
BigShr i%, n%, k%
: (i)
est décalé de n
bits vers la droite. Ceci correspond à une division par 2^n
. Résultat dans (k)
BigGCD i%, j%, k%
: Plus grand commun diviseur de (i)
et (j)
. Résultat dans (k)
BigLCM i%, j%, k%
: Plus petit commun multiple de (i)
et (j)
. Résultat dans (k)
BigPrimList(nmin%, nmax%)
: Crée une liste des nombres premiers compris entre nmin
et nmax
dans le fichier texte PrimList.txt
. Retourne le nombre de nombres premiers.
BigPrimDec(i%)
: Décompose (i)
en produit de facteurs premiers. Résultat sous forme de chaîne de caractères, p. ex. "2^2 * 3^3 * 5^4"
. Les facteurs non identifiés sont représentés par "(?)"
.
Cette fonction utilise les entiers (0)
à (3)
. Il faut donc réserver au moins 5 entiers avec BigInit
.
BigPrimNext(i%)
: Remplace (i)
par le nombre premier immédiatement supérieur ou égal, selon le test probabiliste de Miller-Rabin. Retourne 1 si premier, -1 si probablement premier.
Cette fonction utilise l'entier (0)
. Il faut donc réserver au moins 2 entiers avec BigInit
.