0% ont trouvé ce document utile (0 vote)
3 vues4 pages

Code A

Le document contient une série de fonctions en Python pour déterminer si un nombre premier de la forme p = 120k + 49 est chaotique. Il utilise des critères basés sur des diviseurs spécifiques et des propriétés modulo pour évaluer la 'chaoticité' de ces nombres. Le programme cherche également le plus petit m (≤ 20) qui satisfait une condition donnée pour les premiers trouvés.

Transféré par

amadeusleni619
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
3 vues4 pages

Code A

Le document contient une série de fonctions en Python pour déterminer si un nombre premier de la forme p = 120k + 49 est chaotique. Il utilise des critères basés sur des diviseurs spécifiques et des propriétés modulo pour évaluer la 'chaoticité' de ces nombres. Le programme cherche également le plus petit m (≤ 20) qui satisfait une condition donnée pour les premiers trouvés.

Transféré par

amadeusleni619
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOCX, PDF, TXT ou lisez en ligne sur Scribd

import sympy as sp

def d(m, p):

"""Retourne d(m) = plus petit multiple de 4m-1 strictement supérieur à


mp, moins mp."""

q = 4*m - 1

k = (m * p) // q + 1

return k * q - m * p

def condition(m, p):

"""True si d(m) divise m ou m^2."""

val = d(m, p)

if val == 0:

return False

return (m % val == 0) or ((m*m) % val == 0)

def has_divisor_3k_minus_1(c):

"""Vrai si c a un diviseur de la forme 3k-1 (i.e. un facteur premier ≡ 2


mod 3)."""

# On teste les petits diviseurs, puis on décompose

if c == 1:

return False

# On teste d'abord les petits nombres

for d in
[2,5,11,17,23,29,41,47,53,59,71,83,89,101,107,113,131,137,149,167,173,
179,191,197]:

if d*d > c:

break

if c % d == 0:

if d % 3 == 2:
return True

while c % d == 0:

c //= d

if c > 1 and c % 3 == 2:

return True

return False

def has_bad_factor_mod7(N):

"""Vrai si N a un facteur premier congru à 3,5,6 modulo 7."""

# On teste les petits facteurs

for p in
[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97]
:

if p*p > N:

break

if N % p == 0:

if p % 7 in (3,5,6):

return True

while N % p == 0:

N //= p

if N > 1 and N % 7 in (3,5,6):

return True

return False

def is_chaotic(p):

"""Vrai si p est dans le cas résiduel (ni linéaire, ni transitoire)."""

if p % 4 != 1:

return False

c = (p + 3) // 4

N=c+1
# Linéaire : c a un diviseur 3k-1

if has_divisor_3k_minus_1(c):

return False

# Transitoire : N a un facteur premier ≡ 3,5,6 mod7

if has_bad_factor_mod7(N):

return False

return True

# Paramètres

k_max = 5000 # On teste p = 120k+49 pour k jusqu'à cette borne

max_m_var = 20 # On cherche un m (variable) <= 20

found = []

for k in range(0, k_max):

p = 120*k + 49

if p < 2:

continue

if [Link](p):

if is_chaotic(p):

# Cherche le plus petit m (1..max_m_var) qui vérifie condition

best_m = None

for m_var in range(1, max_m_var+1):

if condition(m_var, p):

best_m = m_var

break

if best_m is not None:

[Link]((p, best_m, d(best_m, p)))

if len(found) >= 20:

break
print("Nombres premiers chaotiques (p = 120k+49) et leur plus petit m ≤
20 :")

for p, m, d_val in found:

print(f"p={p}, m={m}, d={d_val} (divise {m} ou {m}^2)")

Vous aimerez peut-être aussi