$$\newcommand{\mtn}{\mathbb{N}}\newcommand{\mtns}{\mathbb{N}^*}\newcommand{\mtz}{\mathbb{Z}}\newcommand{\mtr}{\mathbb{R}}\newcommand{\mtk}{\mathbb{K}}\newcommand{\mtq}{\mathbb{Q}}\newcommand{\mtc}{\mathbb{C}}\newcommand{\mch}{\mathcal{H}}\newcommand{\mcp}{\mathcal{P}}\newcommand{\mcb}{\mathcal{B}}\newcommand{\mcl}{\mathcal{L}} \newcommand{\mcm}{\mathcal{M}}\newcommand{\mcc}{\mathcal{C}} \newcommand{\mcmn}{\mathcal{M}}\newcommand{\mcmnr}{\mathcal{M}_n(\mtr)} \newcommand{\mcmnk}{\mathcal{M}_n(\mtk)}\newcommand{\mcsn}{\mathcal{S}_n} \newcommand{\mcs}{\mathcal{S}}\newcommand{\mcd}{\mathcal{D}} \newcommand{\mcsns}{\mathcal{S}_n^{++}}\newcommand{\glnk}{GL_n(\mtk)} \newcommand{\mnr}{\mathcal{M}_n(\mtr)}\DeclareMathOperator{\ch}{ch} \DeclareMathOperator{\sh}{sh}\DeclareMathOperator{\th}{th} \DeclareMathOperator{\vect}{vect}\DeclareMathOperator{\card}{card} \DeclareMathOperator{\comat}{comat}\DeclareMathOperator{\imv}{Im} \DeclareMathOperator{\rang}{rg}\DeclareMathOperator{\Fr}{Fr} \DeclareMathOperator{\diam}{diam}\DeclareMathOperator{\supp}{supp} \newcommand{\veps}{\varepsilon}\newcommand{\mcu}{\mathcal{U}} \newcommand{\mcun}{\mcu_n}\newcommand{\dis}{\displaystyle} \newcommand{\croouv}{[\![}\newcommand{\crofer}{]\!]} \newcommand{\rab}{\mathcal{R}(a,b)}\newcommand{\pss}[2]{\langle #1,#2\rangle} $$
Bibm@th

Algorithmes de factorisation

  Le crible quadratique et le crible du corps de nombres sont deux des algorithmes de factorisation d'entiers les plus employés. Ils reposent sur l'idée suivante, due à l'arithméticien français Pierre de Fermat : si on trouve deux entiers x et y, non égaux, non opposés, tels que x2=y2 mod n, alors (x-y)(x+y)=0 mod n, et pgcd(x+y,n) ou pgcd(x-y,n) donne un diviseur non trivial de n.

  Il reste à trouver de tels nombres x et y. Posons x un nombre juste supérieur à racine de n. x2 est juste supérieur à n, et x2=a mod n, avec a petit. Il est donc facile de factoriser a, et avec un peu de chances, en essayant plusieurs x, on peut espérer trouver un a tel que a=y2. Et alors c'est fini!

Ex : Soit à factoriser n=3337. Sa racine carrée vaut 57 et des brouettes... On teste :
  • 582=27=33 mod 3337 : ne convient pas.
  • 592=144=122 mod 3337 : convient!
Alors, pgcd(59+12,3337)=71 donne un diviseur non trivial de n. Le second facteur premier est 49.

  Bien sûr, dans le cas général, en prenant des x juste plus grands que racine de n, il n'est pas sûr que l'on tombe dans le cas précédent. Mais on peut combiner plusieurs équations : si x12=a1 mod n,..., xp2=ap mod n, et que a1...ap=y2 mod n, en posant x=x1...xp, on retrouve x2=y2 mod n.

Ex : Soit à factoriser n=180121, dont la racine carrée vaut 424, et des brouettes... En faisant des essais successifs avec les entiers juste supérieurs à 424, on trouve :
  • 4252=2332527 mod n
  • 4392=233272 mod n
d'où (425.439)2=(23325 7)2 mod n, et pgcd(n,425×439-23325 7)=281 donne un diviseur non trivial de n. Tout le problème réside ensuite dans le choix des bases de petits premiers sur lesquels on souhaite décomposer!