Si vous avez envie de faire une factorielle*, mettez un ! suivi du nombre qu'on veut effectuer la factorielle entre parenthèse ( exemple : !(11) ). *C'est le fait de multiplier tous les nombres inférieurs ou égales à ce nombre supérieur à 0
Si vous voulez maintenant tester une formule, alors mettez à la place du nombre une lettre puis donnez le numéro de début dans la case suivante, notez à quel valeur la lettre doit finir et mettez l'incrément dans la dernière case puis cliquez sur le bouton "vérifier la formule"(ex: 1ère case : 2^n-1, 2ème case: 1, 3ème case : 10, 4ème case : 2 ) et ça donne le pourcentage de la formule.
Si vous ne voulez pas vérifier de formules, alors mettez votre nombres ou calculs dans la première case ou la deuxième case .
Pour la factorisation j'utilise l'agorithme de pollard rho et pour le test de primalité j'utilise celui de miller-rabin dont je fourni le code ci-dessous en python
Il y a eu 11 recherche sur ce site
Autre chose, j'ai construit un petit algorithme de factorisation que j'aimerai bien tester, donc si vous éxécutez le programme si-dessous, j'en serai bien content !
Comment marche-t-il ? Dans mon algo, il y a une suite de nombres, où il faut tester toutes les sommes, ce qui est assez long. Donc avec mon programme, chacun teste une liste différente pour avoir de manière artificielle toutes les sommes car dans mon programme cherchant toutes les sommes, ça dépend de l'ordre de la liste : l'ordre dans laquel le programme donne les sommes dépend de l'ordre de la liste. Puis il s'arrête au bout d'un certain nombre de sommes testé car c'est impossible de tester toutes les sommes en un temps raisonnable.
Quand il trouve un facteur ou quand il change de nombre, vous le saurez via votre terminal. Si vous voulez bien m'aider, vous devez savoir en gros quels nombres on va factoriser : d'abord 33 nombres que j'ai construit, puis tous les nombres RSA qui sont sur le wikipedia anglais :
nombres RSABon, maintenant, le programme :
try: from gmpy2 import log10, log2, log, powmod, gcd, isqrt # plus rapide mais il faut l'installer except: from math import log10, log2, log, gcd, isqrt# rapide mais moins powmod = pow # je veut la puissance modulaire, celle étant dans math # ne l'étant pas from random import shuffle # pour mélanger aléatoirement une liste import requests # pour connaître le nombre que les personnes factorisent actuellement # la fonction sur les suites de syracuse def terms_syr_L(n): L = [] while (1): if n&1:n = n*3+1 else:n >>= 1 L.append(n) if n == 1:return L # Cette fonction est récupéré de la fonction divisors de sympy # en modifiant quelques trucs comme les fois par plus ect. # je remercie donc les dévellopeurs de cette fonction car # celle-ci m'a économisé beaucoup de travail # ne sachant pas comment faire sans utiliser beaucoup de mémoire def sum_of_list(L, m): """generate all sums of L""" shuffle(L) # mélange aléatoirement L, car sinon ça ne marche pas trop. def rec_gen(n=0): if n == len(L): yield 0 else: for q in rec_gen(n + 1): yield (q+L[n]) % m yield q yield from rec_gen() def rel1(n, M = None, maxnums=None): if M is None: M = terms_syr_L(n) if maxnums is None:maxnums=n nbnums = 0 for i in sum_of_list(M, n): # inspiré de la méthode de pollard p-1 : # https://en.wikipedia.org/wiki/Pollard%27s_p_%E2%88%92_1_algorithm ou en français : # https://fr.wikipedia.org/wiki/Algorithme_p-1_de_Pollard x = gcd(pow(i, (n-1)*isqrt(n) *i, n)-1, n) x1 = gcd(pow(i, (n-1)*len(M) *i, n)-1, n) if 1 < x < n:return (x , nbnums, 1) if 1 < x1 < n:return (x1, nbnums, 2) nbnums += 1 if nbnums > maxnums: return [0, 0, 0] nav=0 L = [0] link = "http://premiers.passoire.fr/factors" while(1): if L[0] != 0: print('tu as trouvé un diviseur ! : ', L[0], ', nombre de nombres testé : ', L[1], sep='') req = requests.get(link+'?fac_find={}'.format(L[0])) else: req = requests.get(link) n = int(req.text.split('\n')[-3]) if n != nav: # prévient l'utilisateur print('un nouveau n de', int(log10(n))+1, 'chiffres décimaux :', n) M = terms_syr_L(n) nav = n L = rel1(n, M, maxnums=int(log2(n)**2))
aller coder