Błąd w zadaniu

0

Dzień dobry

Mam problem z poniższym zadaniem. Po wrzuceniu rozwiązania do sprawdzarki "themis" otrzymuje 5 sprawdzeń pozytywnych i 4 negatywne.
Zablokowałem się już i zastanawiam się nad napisaniem kodu od nowa w inny sposób. Może jest coś co można tu poprawić:

Treść zadania:

Napisz program, który oblicza najmniejszą wspólną wielokrotność ciągu liczb naturalnych.
Wejście:
W pierwszy wierszy znajduje się liczba naturalna n, nie większa od 100000.
W drugim wierszu znajduje się ciąg n liczb naturalnych, nie większych od 10^15.
Wyjście: Liczba równa najmniejszej wspólnej wielokrotności wszystkich liczb z ciągu.

Przykład
Dla danych wejściowych:
4
21 224 84 1050
poprawną odpowiedzią jest
16800

Mój kod:

#include <iostream>
using namespace std;

unsigned long long nwd(unsigned long long a, unsigned long long b)
{
	unsigned long long pomocnicza;

        while (b != 0)
        {
            pomocnicza = a % b;
            a = b;
            b = pomocnicza;
        }
	return a;
}


unsigned long long nww(unsigned long long a, unsigned long long b)
{
	unsigned long long wynik;

        wynik = a*b / nwd(a,b);

    return wynik;
}


unsigned long long nwwciagu(unsigned long long* tab, unsigned long long ile)
{
	unsigned long long nww2 = tab[0];

        for (unsigned long long i = 1; i < ile; i++)
        {
            nww2 = nww(nww2,tab[i]);
        }

	return nww2;
}


int main ()
{
	unsigned long long ile;
    cerr << "Ile liczb jest w ciagu: ";
	cin >> ile;
	unsigned long long* tab = new unsigned long long[ile];
	cerr <<"Podaj "<<ile<<" liczby: "<< endl;


        for (unsigned long long i = 0; i < ile; i++)
            {
            cin >> tab[i];
            }
       cout << nwwciagu(tab, ile) << endl;

	return 0;
}
2

Podpowiedź: w tym zadaniu maksymalne wejście to 10¹⁵. Co się stanie, gdy a = 10¹⁵, b = 10¹⁵ - 1?

A tak poza tym: std::lcm, std::accumulate

1

Podpowiedź jak najbardziej pomogła. Dziekuje program już działa.

0

Mam taki sam problem i nie domyślam się co zrobić z tą podpowiedzią. Może ktoś pomóc?

1

Szklana kula podpowiada że błąd masz w okolicach 42-go wiersza.
Chcesz dokładniej - podaj kod.

0
#include<iostream>
using namespace std;

long long NWD(long long a, long long b)
{
	int pom;

  	while(b!=0)
	{
    	pom = b;
    	b = a%b;
    	a = pom;
  	}
    return a;
}

long long NWW(long long arr[], long long n)
{
	long long odp = arr[0];
	for (long long i = 1; i < n; i++)
		odp = (((arr[i] * odp)) /
				(NWD(arr[i], odp)));
	return odp;
}

int main()
{
    long long ile;
    cin >> ile;
    long long *tab = new long long[ile];

    for (long long i = 0; i < ile; i++)
    {
        cin >> tab[i];
    }
    cout << NWW(tab, ile) << "\n";
}
1

x = a*b/c = a/c*b;

0

Dzięki, teraz zadziałało :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1