Path: csiph.com!pasdenom.info!usenet-fr.net!.POSTED!not-for-mail From: Olivier Miakinen Newsgroups: fr.comp.lang.regexp Subject: Re: Trouver les nombres premiers avec une regexp Date: Sun, 1 Dec 2024 10:30:22 +0100 Organization: There's no cabale Lines: 26 Message-ID: References: NNTP-Posting-Host: 200.89.28.93.rev.sfr.net Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 8bit X-Trace: cabale.usenet-fr.net 1733045422 45974 93.28.89.200 (1 Dec 2024 09:30:22 GMT) X-Complaints-To: abuse@usenet-fr.net NNTP-Posting-Date: Sun, 1 Dec 2024 09:30:22 +0000 (UTC) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0 SeaMonkey/2.49.4 In-Reply-To: Xref: csiph.com fr.comp.lang.regexp:232 Le 31/10/2024 13:58, j'écrivais : > > Matt Parker vient de sortir une vidéo (en anglais) où il décortique une regexp > qui permet de tester si une chaîne composée de n caractères identiques a comme > longueur (n donc) un nombre premier : > > How on Earth does ^.?$|^(..+?)\1+$ produce primes? > > > > En réalité, cette regexp ^.?$|^(..+?)\1+$ retourne vrai si la longueur n'est > /pas/ un nombre premier. Et du coup le code python que Matt utilise est : > > import re > n = (le nombre à tester) > print(not re.match(r'^.?$|^(..+?)\1+$', '1'*n)) > > > Et forcément je pose la question : quelle serait la regexp pour tester > directement si la longueur de cette chaîne de 1 *est* un nombre premier ? Une réponse évidente : utiliser une assertion négative englobant celle-ci. -- Olivier Miakinen