Un défi par semaine

Décembre 2017, 4e défi

Le 22 décembre 2017  - Ecrit par  Ana Rechtman Voir les commentaires (12)

Nous vous proposons un défi du calendrier mathématique 2017 chaque vendredi et sa solution la semaine suivante.

Semaine 51 :

Un entier positif est sympathique s’il est multiple du produit de ses chiffres.
Par exemple $312$ est un nombre sympathique puisque $312=52\times (3\times 1\times 2)$. Combien y a-t-il de nombres sympathiques à deux chiffres ?

Solution du 3e défi de Décembre :

Enoncé

La réponse est en deuxième position.

L’énoncé dit que Sophie a nagé plus vite que Marie, que Marie a été plus rapide que Paule et Paule plus rapide que Laura, et enfin que Laura est arrivée avant Anne. Le classement final est donc : Sophie, Marie, Paule, Laura et Anne, donc Marie est arrivée en deuxième position.

Post-scriptum :

Calendrier mathématique 2017 - Sous la direction d’Ana Rechtman, Maxime Bourrigan - Textes : Antoine Rousseau et Marcela Szopos.
2016, Presses universitaires de Strasbourg. Tous droits réservés.

Article édité par Ana Rechtman

Partager cet article

Pour citer cet article :

Ana Rechtman — «Décembre 2017, 4e défi» — Images des Mathématiques, CNRS, 2017

Crédits image :

Image à la une - MAURITUS IMAGES / IMAGEBROKER / J.W. ALKER / PHOTONONSTOP

Commentaire sur l'article

Voir tous les messages - Retourner à l'article

  • Décembre 2017, 4e défi

    le 22 décembre 2017 à 15:49, par Celem Mene

    Ca me semble pourtant bien correct. Mais ça met 1.5 x plus de temps. Pour info voici le mien :

    /*
    Compilation : gcc -std=c99 -Wall -Wextra -pedantic sympathique.c -o sympathique
    */

    #include <stdio.h>
    #include <stdlib.h>

    int sympathique (unsigned long long, unsigned long long *) ;

    int sympathique (unsigned long long n, unsigned long long *p)

    unsigned long long m = n ;
    *p = 1 ;

    while (m && *p)

    *p *= m % 10 ;
    m /= 10 ;

    if (*p == 0)
    return 0 ;
    else
    return n % *p == 0 ? 1 : 0 ;

    int main (int argc, char *argv[])

    unsigned long long max, min, n, c = 0, p ;

    if (argc == 1)
    printf (« Utilisation : %s [minimum] maximum.\n », argv[0]) ;
    else
    min = (unsigned) atoll (argv[1]) ;

    max = argc > 2 ? (unsigned) atoll (argv[2]) : min ;
    n = min ;

    while (n <= max)

    if (sympathique (n, &p))

    c++ ;
    printf ("%llu %llu %llu\n", c, n, p) ;

    n++ ;

    return EXIT_SUCCESS ;

    Répondre à ce message

Laisser un commentaire

Forum sur abonnement

Pour participer à ce forum, vous devez vous enregistrer au préalable. Merci d’indiquer ci-dessous l’identifiant personnel qui vous a été fourni. Si vous n’êtes pas enregistré, vous devez vous inscrire.

Connexions’inscriremot de passe oublié ?