Vraag C # vind de grootste gemene deler


"De grootste gemene deler van twee gehele getallen is het grootste gehele getal dat elk van de twee getallen gelijk verdeelt.Schrijfmethode Gcd die de grootste gemene deler van twee gehele getallen oplevert.Invoeg de methode in een app die twee waarden van de gebruiker leest en de resultaat."

(dit is geen huiswerk, alleen een oefening in het boek dat ik gebruik)

kun je me helpen dit op te lossen? Dit is wat ik tot nu toe heb gekregen. Bedankt

(bewerken - ik kan de twee cijfers indienen, maar de GCD wordt niet voor mij berekend)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Greatest_Common_Divisor
{
class Program
{

    static int GetNum(string text)
    {
        bool IsItANumber = false;
        int x = 0;
        Console.WriteLine(text);

        do
        {
            IsItANumber = int.TryParse(Console.ReadLine(), out x);

        } while (!IsItANumber);

        return x;
    }
    static void Main(string[] args)
    {
        string text = "enter a number";
        int x = GetNum(text);
        text = "enter a second number";
        int y = GetNum(text);


        int z = GCD(x, y);
        Console.WriteLine(z);
    }

    private static int GCD(int x, int y)
    {
        int v = 0;
        int n = 0;

        v = GetGreatestDivisor(x, y);


        return v;

    }

    static int GetGreatestDivisor(int m, int h)
        {

            do
            {
                for (int i = m; i <= 1; i--)



                    if (m%i == 0 && h%i == 0)
                    {
                        int x = 0;
                        x = i;

                        return x;
                    }
            } while (true);
            return m;
        }

  }
}

10
2017-08-30 21:38


oorsprong


antwoorden:


Hier is een implementatie van de Euclidisch algoritme dat levert de grootste gemene deler op zonder enige heap-toewijzing uit te voeren.

U kunt vervangen ulong voor uint indien nodig. Een niet-ondertekend type wordt gebruikt, omdat de techniek niet werkt voor getekende waarden. Als je je kent a en b waarden zijn niet negatief, u kunt gebruiken long of int in plaats daarvan.

private static ulong GCD(ulong a, ulong b)
{
    while (a != 0 && b != 0)
    {
        if (a > b)
            a %= b;
        else
            b %= a;
    }

    return a == 0 ? b : a;
}

Deze methode wordt gebruikt in mijn metadata-extractor bibliotheek, waar deze is gekoppeld unit tests.


20
2018-01-20 14:38



LINQ gebruiken:

static int GCD(int[] numbers)
{
    return numbers.Aggregate(GCD);
}

LINQ niet gebruiken:

static int GCD(int a, int b)
{
    return b == 0 ? a : GCD(b, a % b);
}

Opmerking: antwoord hierboven geleend van geaccepteerd antwoord op Grootste gemene deler uit een set van meer dan 2 gehele getallen.


15
2017-08-30 21:44



U kunt proberen te gebruiken deze: -

static int GreatestCommonDivisor(int[] numbers)
{
    return numbers.Aggregate(GCD);
}

static int GreatestCommonDivisor(int x, int y)
{
return y == 0 ? x : GCD(y, x % y);
}

4
2017-08-30 21:41



Probeer dit:

public static int GCD(int p, int q)
{
    if(q == 0)
    {
         return p;
    }

    int r = p % q;

    return GCD(q, r);
}

3
2017-08-30 21:50



    int a=789456;


    int b=97845645;
    if(a>b)     
    {

    }
    else
    {
        int temp=0;
        temp=a;
        a=b;
        b=temp;
    }
    int x=1;
    int y=0 ;

    for (int i =1 ; i < (b/2)+1 ; i++ )
    {

        if(a%i==0)
        {
             x=i;
        }
        if(b%i==0)
        {
             y=i;
        }
        if ((x==y)& x==i & y==i & i < a)
        {
            Console.WriteLine(i);
        }

    }

-1
2017-12-24 11:26