Le code de l’exercice 1
N <- 12 / y
Mid <- function(N) {
S <- [Link](N^2)
while (nchar(S) / 8) {
V <- "0"
S <- paste(V, S, sep = "")
News <- substr(S, 3, 6)
return(News / 1000)
}
}
Le générateur Middle Square génère une suite de nombres en prenant un nombre de départ
(le seed), en le mettant au carré, puis en extrayant les chiffres du milieu du carré pour obtenir
le prochain nombre. Ce processus est répété pour générer plusieurs nombres. Par exemple, si
on commence avec un seed de 12 et qu'on choisit d'extraire 2 ou 4 chiffres du milieu de
chaque carré, on obtient une séquence de nombres en appliquant cette méthode à chaque
étape. Ce générateur est simple à implémenter en R et montre comment un petit nombre
peut être utilisé pour produire une suite pseudo-aléatoire.
Le code de l’exercice 2
f <- function(x) {
return((326 * x) %% 332)
}
x_values <- 0:30000
y_values <- f(x_values)
sample_indices <- seq(1, length(x_values), by = 10)
plot(x_values[sample_indices], y_values[sample_indices],
main = "Nuage de points : f(x) = (326x) %% 332",
xlab = "Variable X",
ylab = "Variable Y",
col = "blue", pch = 16, cex = 0.6)
Le code trace un graphique de la fonction f(x)=(326⋅x)mod 332f(x) = (326 \cdot x) \mod
332f(x)=(326⋅x)mod332 pour xxx de 0 à 30 000. Pour rendre le graphique plus lisible, un point sur
dix est utilisé, et les points sont affichés en bleu avec une taille réduite.
Le code de l’exercice 3
GCL <- function(m, a, c, X0, n) {
X <- numeric(n)
X[1] <- X0
for (i in 2:n) {
X[i] <- (a * X[i - 1] + c) %% m
}
return(X / m)
}
m1 <- 16; a1 <- 13; c1 <- 7; X01 <- 4
gen1 <- GCL(m1, a1, c1, X01, 20)
cat("Cas 1: ", gen1, "\n")
m2 <- 16; a2 <- 19; c2 <- 0; X02 <- 5
gen2 <- GCL(m2, a2, c2, X02, 20)
cat("Cas 2: ", gen2, "\n")
m3 <- 7; a3 <- 3; c3 <- 0; X03 <- 6
gen3 <- GCL(m3, a3, c3, X03, 20)
cat("Cas 3: ", gen3, "\n")
m4 <- 2^31 - 1; a4 <- 75; c4 <- 0; X04 <- 1
n <- 1000000
gen4 <- GCL(m4, a4, c4, X04, n)
hist(gen4, breaks = 50, probability = TRUE, col = "skyblue",
main = "Distribution des nombres générés (Cas 4)", xlab = "Valeurs générées")
curve(dunif(x, 0, 1), col = "red", lwd = 2, add = TRUE)
cat("Période Cas 1: ", length(unique(gen1)), "\n")
cat("Période Cas 2: ", length(unique(gen2)), "\n")
cat("Période Cas 3: ", length(unique(gen3)), "\n")
Ce code utilise une Génératrice Congruentielle Linéaire (GCL) pour produire des nombres pseudo-
aléatoires entre 0 et 1 en suivant une formule récurrente. Les trois premiers tests explorent des
paramètres simples et montrent des périodes limitées, tandis que le quatrième cas, avec un grand
module (m=231−1m = 2^{31} - 1m=231−1), génère 1 million de valeurs. Leur distribution est
analysée graphiquement et comparée à une loi uniforme pour évaluer la qualité de la génération.