Błąd w zadaniu

Błąd w zadaniu
Slawek B
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 4 lata
  • Postów:12
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:

Kopiuj
#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;
}
Althorion
Moderator C/C++
  • Rejestracja:prawie 10 lat
  • Ostatnio:około 6 godzin
  • Postów:1605
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

edytowany 4x, ostatnio: Althorion
Slawek B
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 4 lata
  • Postów:12
1

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

edytowany 1x, ostatnio: Slawek B
MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:minuta
1

Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
R6
  • Rejestracja:prawie 4 lata
  • Ostatnio:prawie 4 lata
  • Postów:3
0

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

_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:dzień
1

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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
R6
  • Rejestracja:prawie 4 lata
  • Ostatnio:prawie 4 lata
  • Postów:3
0
Kopiuj
#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";
}
edytowany 1x, ostatnio: robert666
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:dzień
1

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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon
R6
  • Rejestracja:prawie 4 lata
  • Ostatnio:prawie 4 lata
  • Postów:3
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.