IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Nombre premier ? ca ne marche pas ?


Sujet :

C#

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Nombre premier ? ca ne marche pas ?
    Bonjour,
    Je suis nouveau sur le forum meme si je le frequentais depuis pas mal de temps surtout quand je faisais beaucoup de php.
    Je me suis recemment mis au c#, et j'essaye donc de pratiquer un maximum. J'essaye de faire quelques problemes sur le site https://projecteuler.net/ ( si vous avez un site avec des exercices sur lesquels je pourrais m'etrainer, des tutos etc merci de les laisser en commentaire !! )

    donc mon soucis est le suivant : il faut que je trouve le plus grand diviseur premier de : 600851475143 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    using System;
    using System.Collections.Generic;
    namespace nombrepremier
    {
    	class MainClass
    	{
    		public static void Main (string[] args)
    		{
    			long k = 600851475143;
    			List<long> chiffres = new List<long>();
    			for (long i = 1; i < k; i++) 
    			{
    				chiffres.Add (i);
    			}
    			foreach(long chiffre in chiffres)
    			{
    				for(long d=2;d<chiffre; d++) {
    					if(chiffre%d==0) { 
    						Console.WriteLine(chiffre+"n'est pas premier ");
    						return;
    					}
    				}
    				Console.WriteLine(chiffre+"est premier.");
    			}
     
    		}
    	}
    }
    Si quelqu'un veut bien m'aider j'en serais ravi ! merci et bonne journée à vous !

  2. #2
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Voici une proposition, je cherche toujours a optimiser la découverte des diviseurs.

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
            static void Main(string[] args)
            {
                long k = 600851475143;
                long resultat = 0;
     
                for (long i = k; i > 1 / 2; i--)
                {
                    if (k % i == 0 && EstNombrePremier(i))
                    {
                        resultat = i;
                        break;
                    }
                }
            }
     
            public static bool EstNombrePremier(double n)
            {
                int i;
                int racine;
                bool fini;
                decimal debRacine = Convert.ToInt32(Math.Sqrt(n));
                racine = Convert.ToInt32(Math.Truncate(debRacine));
                fini = false;
     
                i = 3;
                if (n < 2) { fini = true; }
                else if (n != 2)
                {
                    if (n % 2 == 0)
                    {
                        fini = true;
                    }
                    else
                    {
                        while ((!fini) && (i <= racine))
                        {
                            if (n % i == 0) { fini = true; }
                            else { i = i + 2; }
                        }
                    }
                }
                return (!fini);
            }

  3. #3
    Membre chevronné
    Homme Profil pro
    edi
    Inscrit en
    Juin 2007
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : edi

    Informations forums :
    Inscription : Juin 2007
    Messages : 898
    Points : 1 915
    Points
    1 915
    Par défaut
    Il y a ce site avec une section C# (et pour pratiquement n'importe quel langage) : exercism.io

    Mais ton site à l'air pas mal aussi.

  4. #4
    Expert confirmé

    Homme Profil pro
    Responsable déploiement (SCCM, InTune, GPO)
    Inscrit en
    Juillet 2014
    Messages
    3 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable déploiement (SCCM, InTune, GPO)
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2014
    Messages : 3 184
    Points : 5 755
    Points
    5 755
    Par défaut
    Voici le code optimisé.
    J'ai utilisé une expression linq pour simplifier l'écriture du code.

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
            static void Main(string[] args)
            {
                // Pas de résultat si result vaut 0
                long result = GetFactors(600851475143).Where(a => EstNombrePremier(a)).OrderByDescending(a => a).FirstOrDefault();
                // result vaut : 6857
            }
     
            private static IEnumerable<long> GetFactors(long num)
            {
                for (long factor = 1; factor * factor <= num; factor++)
                {
                    if (num % factor == 0)
                    {
                        yield return factor;
                        if (factor * factor != num)
                            yield return num / factor;
                    }
                }
            }
     
            public static bool EstNombrePremier(double n)
            {
                int i;
                int racine;
                bool fini;
                decimal debRacine = Convert.ToInt32(Math.Sqrt(n));
                racine = Convert.ToInt32(Math.Truncate(debRacine));
                fini = false;
     
                i = 3;
                if (n < 2) { fini = true; }
                else if (n != 2)
                {
                    if (n % 2 == 0)
                    {
                        fini = true;
                    }
                    else
                    {
                        while ((!fini) && (i <= racine))
                        {
                            if (n % i == 0) { fini = true; }
                            else { i = i + 2; }
                        }
                    }
                }
                return (!fini);
            }
        }

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup pour vos retours !

Discussions similaires

  1. premier programme HelloWorld ne marche pas
    Par rutfeli dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 29/02/2016, 15h11
  2. [AC-2007] Je veux Comprendre : Requete Regroupement opération "premier" ne marche pas
    Par mosbehslim dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 04/10/2014, 01h39
  3. Classe Monstre (ma premiere) : le constructeur ne marche pas
    Par Christophe Genolini dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 14/06/2013, 16h54
  4. Réponses: 12
    Dernier message: 29/04/2005, 14h37
  5. Sysdate qui marche pas ??
    Par StouffR dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/08/2002, 13h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo