Partage
  • Partager sur Facebook
  • Partager sur Twitter

une bonne énigme

Que Des Suites Arithmétiques

Sujet résolu
    8 août 2011 à 2:09:46

    Salut Amis Z3r0s :-° .
    je veux propose cette énigme qui ressemble à celle du Project Euler:
    "Si nous énumérons tous nombres entiers en-dessous de 20 qui sont des multiples de 7 ou de 11, nous obtenons 7, 11 et14 dont la somme est 32. Trouvez la somme de tous les multiples de 7 ou de 11 en-dessous de 1000."


    HacKill3r.</span></span>
    • Partager sur Facebook
    • Partager sur Twitter
      8 août 2011 à 3:19:04

      #!/usr/bin/python 
      #coding: utf-8
      
      import math
      
      S=0
      for i in range(1,1001) :
      	if i%7==0 or i%11==0 :
      		S+=i
      print(S)
      

      Donc 110110


      edit: ah oui et par rapport au sous titre, on peut en effet calculer ça comme ça aussi :

      Comme 1000=7*142+6=11*90+10=77*12+76 la somme S qu'on cherche est :
      <math>\(S=\sum_{i=1}^{142}7i+\sum_{i=1}^{90}11i-\sum_{i=1}^{12}77i\)</math>
      Donc <math>\(S=7\frac{142*143}{2}+11\frac{90*91}{2}-77\frac{12*13}{2}\)</math>
      Donc <math>\(S=110110\)</math>
      ( il ne faut pas oublier d'enlever les multiples de 11 et 7 ( soit les multiples de 77 ) sinon on les compte en double )
      • Partager sur Facebook
      • Partager sur Twitter
        8 août 2011 à 17:45:37

        Ah oui je trouve la même chose à l'aide du C:



        #include <stdio.h>
        main()
        {
            int a=7,b=11,cpt=0,i=7;
        	
        	
        	for(i=7;i<1000;i++)
        	{
        		if(i%a==0 || i%b==0)
        		{
        			cpt+=i;
        		}
        		
        	}
        	 printf("cpt=%d\n",cpt);
        	
        }
        Résultat:110110
        

        Par contre si tu pouvais nous expliquer la méthode mathématique ce serait génial. J'ai fait les séries numériques cette année mais je crains ne pas comprendre ta méthode.
        • Partager sur Facebook
        • Partager sur Twitter
          8 août 2011 à 18:13:38

          La résolution mathématique n'a pas grand chose à voir avec les séries.
          En fait, on cherche tous les nombres qui sont soit des multiples de 7, soit des multiples de 11, et qui sont en-dessous de 1000.
          C'est-à-dire, on cherche les nombres entre 0 et 1000 qui peuvent s'écrire sous la forme <math>\(7q\)</math> ou <math>\(11r\)</math>.
          Ceux qui peuvent s'écrire sous la forme <math>\(7q\)</math> sont clairement les entiers <math>\(n = 7q\)</math> avec <math>\(0 \leq q \leq \frac{1000}{7}\)</math> et de même pour ceux de la forme <math>\(11q\)</math>.
          On écrit donc la division euclidienne de <math>\(1000\)</math> par <math>\(7\)</math> et par <math>\(11\)</math> (ce qu'à fait rom1504) pour déterminer ces entiers, puis on en fait la somme : <math>\(\sum_{i = 1}^{142} 7i + \sum_{i = 1}^{90} 11i\)</math>.
          Cependant, comme il le fait remarquer, en procédant ainsi on compte deux fois les multiples de <math>\(77 = 7 \times 11\)</math> (ils sont comptés avec <math>\(i = 11q'\)</math> dans la première somme et <math>\(i = 7r'\)</math> dans la seconde) ; il faut donc les retirer une fois.
          Et on obtient ainsi le résultat.

          C'est tout simplement le fait que le cardinal de l'union de deux ensembles (finis) est égal à la somme des cardinaux de ces deux ensembles à laquelle on soustrait le cardinal de l'intersection.
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            8 août 2011 à 18:15:19

            Bonsoir,
            enigme...bof :(
            il me semble que les project Euler c'est en principe un peu plus coriace!
            • Partager sur Facebook
            • Partager sur Twitter
              8 août 2011 à 18:18:48

              Alors pour la méthode mathématique :
              On cherche à calculer la somme des nombre entre 1 et 1000 qui sont soit multiple de 7 soit de 11.Ca reviens à calculer la somme de ceux qui sont multiple de 7 plus la somme de ceux qui sont multiple de 11 moins la somme de ceux qui sont multiple de 7 et de 11 à la fois ( car ils sont décompté à la fois dans la somme des multiples de 11 et la somme des multiples de 7 ).
              Il faut donc calculer ces trois sommes. La première est la somme des multiples de 7 entre 1 et 1000. Ces multiples s'écrivent 7i avec i qui commence à 1. Il faut donc déterminer quel est le dernier multiple de 7 entre 1 et 1000, je divise donc 1000 par 7 : 1000=7*142+6. Donc le dernier multiple de 7 avant 1000 est 7*142.
              Donc les multiples de 7 entre 1 et 1000 sont les nombre de la forme 7i avec i entre 1 et 142.
              La somme qu'on cherche est donc <math>\(S_1=\sum_{i=1}^{142}7i\)</math>
              On peut la réécrire comme ça : <math>\(S_1=7\sum_{i=1}^{142}i\)</math>
              Or on sait que <math>\(\sum_{i=1}^{n}i=\frac{n(n+1)}{2}\)</math>
              Donc <math>\(S_1=7\frac{142*143}{2}\)</math>
              Ensuite j'applique la même méthode pour les sommes des multiples de 11 et 77 et j'arrive au résultat donné plus haut ;)
              • Partager sur Facebook
              • Partager sur Twitter
                8 août 2011 à 18:21:56

                Merci cbasile06 tu dois surement être le 1er en math dans ta classe :p
                Je te remercie rom1504 c'est exactement la même explication que cbasile06..
                • Partager sur Facebook
                • Partager sur Twitter
                  8 août 2011 à 19:15:57

                  Oui j'avais déjà écris avant de voir qu'il a posté, ça fait un peu doublon maintenant...
                  • Partager sur Facebook
                  • Partager sur Twitter
                    9 août 2011 à 1:11:45

                    Oui c'est comme ça, l'astuce c'est d'enlever les communs...Bravo
                    • Partager sur Facebook
                    • Partager sur Twitter
                      10 août 2011 à 1:03:25

                      Je suis allé sur le site de 'Project Euler' et là j'ai réussi à faire quelques exercices notamment les premiers. Par contre celui où il fallait calculer la somme des chiffres de 100! j'y suis pas arrivé bien que cela me semblait faisable.Mon idée était de faire des divisions par puissance de 10 puis à chaque ajouter la partie entière à un compteur mais en C j'ai un problème avec les types de variables. Alors j'aimerai savoir comment vous avez procédé si toutefois vous avez traité cet exercice?
                      • Partager sur Facebook
                      • Partager sur Twitter
                        12 août 2011 à 4:00:57

                        Oui je pense que c'est la meilleur méthode,
                        je pense que c'est ça qu'est ce que vous voulez dire:
                        Pour( i = 1; i <= 100; i++)
                        {
                        nombre = nombre * i;
                        }
                        ici en reçois la valeur de 100!(nombre = 100!)
                        après on ajoute à chaque fois nombre mod 10 à une somme(somme des chiffres) et en divise nombre par 10(nombre/10)
                        tanque(nombre > 0)
                        {
                        somme = somme + nombre mod 10;
                        nombre = nombre/10
                        }
                        • Partager sur Facebook
                        • Partager sur Twitter
                          12 août 2011 à 9:52:39

                          Je ne suis pas sûr du bien fondé de cette méthode, car dans tous les langages codant leurs entiers sur un nombre restreint de bits (32 bits par exemple) comme le C, il va être dur de pouvoir manipuler 100!. Et si on le fait dans un langage comme le scheme qui est capable de manipuler de si grands nombres, ça ne se fera pas en un temps court (et ça n'est pas élégant).

                          Pour donner une idée de la taille de 100! : http://www.wolframalpha.com/input/?i=100!
                          • Partager sur Facebook
                          • Partager sur Twitter
                            12 août 2011 à 14:10:42

                            En python j'ai fait comme ça ( en gros ) et ça marche rapidement( moins de 5sec )
                            • Partager sur Facebook
                            • Partager sur Twitter
                              12 août 2011 à 18:28:16

                              Au temps pour moi pour le temps de calcul, mais je maintiens qu'en C avec les types de base, ça ne se fait pas, il faut passer par une librairie permettant la gestion de grands nombres.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                12 août 2011 à 18:48:07

                                Oui oui c'est sur, les types de base du C ne vont pas.
                                • Partager sur Facebook
                                • Partager sur Twitter

                                une bonne énigme

                                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                • Editeur
                                • Markdown