Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 09/02/2015, à 06:14

karamelo

[RESOLU]Decomposition de nombre aleatoirement

Bonjour,
j'ai un petit soucis si une âme charitable passe dans le coin.

Mon problème:
J'ai ce nombre: 234456701234567
Je souhaite le décomposer en 30 nombres pseudo aléatoires (entier) afin d'arrivé au résultat cité plus haut.

en gros: 3783182182+8267124740+1737364849+ ........ =234456701234567


Dans quel langage de programmation je peux faire ceci? (python, bash, javascript, php...)

Merci de votre attention.

Dernière modification par karamelo (Le 09/02/2015, à 19:37)

Hors ligne

#2 Le 09/02/2015, à 06:36

Watael

Re : [RESOLU]Decomposition de nombre aleatoirement

salut,

peu importe le langage, ce qui compte c'est l'algorithme.

autant que je sache, non pas qu'ils n'en soient pas capables, mais parce qu'ils nécessitent le recours à un navigateur internet pour afficher leurs données,
javascript et php ne sont pas adaptés (même s'il existe une CLI pour php);

donc plutôt bash, ou python, ou perl


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 09/02/2015, à 07:33

karamelo

Re : [RESOLU]Decomposition de nombre aleatoirement

Merci de votre réponse
il y a bien 'factor' mais bon c'est pas ce qu'il me faut
je vais voir avec awk

Hors ligne

#4 Le 09/02/2015, à 09:04

tiramiseb

Re : [RESOLU]Decomposition de nombre aleatoirement

parce qu'ils nécessitent le recours à un navigateur internet pour afficher leurs données,
javascript et php ne sont pas adaptés (même s'il existe une CLI pour php);

Il y a en effet une CLI pour PHP, mais on peut également faire du Javascript hors navigateurs (voir PhantomJS, NodeJS, ce genre de choses...)

Hors ligne

#5 Le 09/02/2015, à 10:45

gigiair

Re : [RESOLU]Decomposition de nombre aleatoirement

Il faut vérifier que le langage que tu choisis est capable d'opérer sur des nombres entiers très grands, ce qui n'est pas évident.

Ton algorithme consiste à effectuer un tirage aléatoire (je suppose suivant une loi uniforme) de 29 entiers dans l'intervalle [0;234456701234567] puis de la  trier en ordre croissant disons a1, a2,...,a29. Poser a30=234456701234567 puis d'en déduire la suite b1=a1 - 0, b2=a2-a1,b3=a3-a2,...,b{i}=a{i}-a{i-1},...,b30=a30-a29 dont la somme est 234456701234567.
Si le langage n'implémente pas les très grands entiers, il faut les simuler c'est plus sportif, et il faut aussi éventuellement coder une loi uniforme.


--
JJR.

Hors ligne

#6 Le 09/02/2015, à 13:05

karamelo

Re : [RESOLU]Decomposition de nombre aleatoirement

Bon c'est pas gagné et cela commence à me dépassé.
Décomposer la somme d'un chiffre aléatoirement devient vite compliqué mais bon je vais continué à chercher il y a bien quelqu'un qui à dut si frotté.
Merci pour vos réponses.

Hors ligne

#7 Le 09/02/2015, à 14:18

pingouinux

Re : [RESOLU]Decomposition de nombre aleatoirement

Bonjour,
En reprenant l'idée de gigiair en #5, voici un script en python3 qui devrait convenir (MemoryError avec les grands nombres en python2).

from random import Random
import sys

N=int(sys.argv[1])
M=int(sys.argv[2])

rnd=Random()

b=[]
a=[0]
a.extend(sorted(rnd.sample(range(N),M-1)))
a.append(N)
print("\na=%s"%a)
for k in range(0,M) : b.append(a[k+1]-a[k])
print("\nb=%s\n\nsomme=%s\n"%(b,sum(b)))

à lancer ainsi

python3 decomposition_aleatoire.py 234456701234567 30

Voici un résultat

a=[0, 3301975580404, 11469809541988, 26515243428891, 45222144501544, 46545685248247, 47073249546193, 48308147478374, 55867699055300, 60137492473826, 67813980013339, 85297645151109, 86711601602193, 87422106800260, 90572738116641, 105803756399015, 110917280980499, 123399845452193, 124233449056378, 125051789977341, 130527259728064, 164169051939849, 180623728957090, 188938724052086, 193560831084974, 196108096839596, 197111786262658, 210138884839451, 220247269687380, 225295685797056, 234456701234567]

b=[3301975580404, 8167833961584, 15045433886903, 18706901072653, 1323540746703, 527564297946, 1234897932181, 7559551576926, 4269793418526, 7676487539513, 17483665137770, 1413956451084, 710505198067, 3150631316381, 15231018282374, 5113524581484, 12482564471694, 833603604185, 818340920963, 5475469750723, 33641792211785, 16454677017241, 8314995094996, 4622107032888, 2547265754622, 1003689423062, 13027098576793, 10108384847929, 5048416109676, 9161015437511]

somme=234456701234567

Hors ligne

#8 Le 09/02/2015, à 19:36

karamelo

Re : [RESOLU]Decomposition de nombre aleatoirement

Heu comment dire............. MERCI BEAUCOUP, bon certes vous me mâchez le travail mais le résultat est impressionnant  et fort efficace (ainsi que la rapidité d’exécution).
Magique merci encore.

Sujet résolu par @MR.Pingouinux big_smile & @MR.gigiair

Dernière modification par karamelo (Le 10/02/2015, à 06:12)

Hors ligne

#9 Le 09/02/2015, à 22:26

gigiair

Re : [RESOLU]Decomposition de nombre aleatoirement

Le problème aurait pu se traiter très simplement en maxima.
Les commandes peuvent s'exécuter interactivement en lançant la commande maxima, ou dans un fichier batch en lançant la commande maxima -b <fichier>
Code maxima :

load(distrib)$
/* distrib est une bibliothèque qui implémente les 
différentes distributions aléatoires */

diffs(liste,borne):=endcons(borne,liste)-cons(0,liste)$
decomp(max,nb):=diffs(sort(random_discrete_uniform(max,nb-1)),max)$

b:decomp(234456701234567,30)$

print(" Liste des 30 nombres : ",b)$
print("somme de ces 30 nombres : ",sum(b[i],i,1,30))$

--
JJR.

Hors ligne

#10 Le 10/02/2015, à 06:14

karamelo

Re : [RESOLU]Decomposition de nombre aleatoirement

Je ne connaissais pas maxima cela fonctionne aussi très bien, merci pour la découverte

Hors ligne

#11 Le 10/02/2015, à 11:47

gigiair

Re : [RESOLU]Decomposition de nombre aleatoirement

Maxima est un logiciel de calcul formel (CAS) développé en Clisp. C'est l'un des plus anciens. Je pense que n'importe quel autre CAS peut convenir, car il n'est pas  pensable qu'un CAS ait une limite pour la taille des entiers.
La plupart des langages informatique généralistes reprennent l'arithmétique du processeur donc ne peuvent traiter que des entiers inférieurs à 2^32=4 294 967 296 ou 2^64=18 446 744 073 709 551 616 suivant les cas. Souvent c'est moins car un ou deux bits sont utilisés à autre chose.

Une question me taraude : quel peut bien être l'intérêt de décomposer un aussi grand nombre en somme ?


--
JJR.

Hors ligne

#12 Le 10/02/2015, à 12:34

karamelo

Re : [RESOLU]Decomposition de nombre aleatoirement

Alors ça c'est de l'explication merci pour l'éclairage de lanterne.
Quand au but:
je ne souhaite pas dévoiler le but final en public pour le moment mais je vous répondrais par mp  volontiers, chose que je vais faire de ce pas.
Merci encore pour votre aide à tous.

Hors ligne