[c++] rozwiązanie równania

Awatar użytkownika
rochaj
Użytkownik
Użytkownik
Posty: 411
Rejestracja: 3 lip 2012, o 23:51
Płeć: Mężczyzna
Lokalizacja: komp
Podziękował: 128 razy
Pomógł: 2 razy

[c++] rozwiązanie równania

Post autor: rochaj »

Mamy równanie \(\displaystyle{ x^3+ax=b}\), chcemy je rozwiązać w liczbach całkowitych. Użytkownik podaje liczby całkowite a i b, a program ma wyliczyć x. Mam taki problem gdy przechodzę pętlą wszystkie x to następują przekroczenie czasu (1 s). Dzieje się to w przypadku gdy x=565773. Jak się da jakoś inaczej to rozwiązać?
luka52
Użytkownik
Użytkownik
Posty: 8601
Rejestracja: 1 maja 2006, o 20:54
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 47 razy
Pomógł: 1816 razy

[c++] rozwiązanie równania

Post autor: luka52 »

Zamiast sprawdzać każdy \(\displaystyle{ x}\) można sprytniej: ... nonicznych
Awatar użytkownika
rochaj
Użytkownik
Użytkownik
Posty: 411
Rejestracja: 3 lip 2012, o 23:51
Płeć: Mężczyzna
Lokalizacja: komp
Podziękował: 128 razy
Pomógł: 2 razy

[c++] rozwiązanie równania

Post autor: rochaj »

luka52 pisze:Zamiast sprawdzać każdy \(\displaystyle{ x}\) można sprytniej: ... nonicznych
Aha zapomniałem dodać że nie można używać tych wzorów.
Awatar użytkownika
Vardamir
Użytkownik
Użytkownik
Posty: 1913
Rejestracja: 3 wrz 2010, o 22:52
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 6 razy
Pomógł: 410 razy

[c++] rozwiązanie równania

Post autor: Vardamir »

rochaj pisze:Aha zapomniałem dodać że nie można używać tych wzorów.
To może powiedz od razu, co można używać, a czego nie. Bo będziemy sobie tak dyskutować, dyskutować, a w końcu i tak nie na temat.

Wolfram mówi, że rozwiązanie jest w liczbach całkowitych, gdy \(\displaystyle{ b=a+1}\). To jest kod do sprawdzaczki?
Awatar użytkownika
rochaj
Użytkownik
Użytkownik
Posty: 411
Rejestracja: 3 lip 2012, o 23:51
Płeć: Mężczyzna
Lokalizacja: komp
Podziękował: 128 razy
Pomógł: 2 razy

[c++] rozwiązanie równania

Post autor: rochaj »

Vardamir pisze:
rochaj pisze:Aha zapomniałem dodać że nie można używać tych wzorów.
To może powiedz od razu, co można używać, a czego nie. Bo będziemy sobie tak dyskutować, dyskutować, a w końcu i tak nie na temat.

Wolfram mówi, że rozwiązanie jest w liczbach całkowitych, gdy \(\displaystyle{ b=a+1}\). To jest kod do sprawdzaczki?
Tak to do sprawdzarki. Liczby a i b to podaje użytkownik i jeśli istnieje rozwiązanie to program wylicza x. Użytkownik nie wie kiedy jest rozwiązanie.
Awatar użytkownika
Vardamir
Użytkownik
Użytkownik
Posty: 1913
Rejestracja: 3 wrz 2010, o 22:52
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 6 razy
Pomógł: 410 razy

[c++] rozwiązanie równania

Post autor: Vardamir »

Wczytaj \(\displaystyle{ a}\) i \(\displaystyle{ b}\). Sprawdź czy spełniają warunek \(\displaystyle{ b=a+1}\). Jeśli tak, to rozwiązanie \(\displaystyle{ x=1}\), jeśli nie to nie ma rozwiązania w liczbach całkowitych.
Awatar użytkownika
rochaj
Użytkownik
Użytkownik
Posty: 411
Rejestracja: 3 lip 2012, o 23:51
Płeć: Mężczyzna
Lokalizacja: komp
Podziękował: 128 razy
Pomógł: 2 razy

[c++] rozwiązanie równania

Post autor: rochaj »

Vardamir pisze:Wczytaj \(\displaystyle{ a}\) i \(\displaystyle{ b}\). Sprawdź czy spełniają warunek \(\displaystyle{ b=a+1}\). Jeśli tak, to rozwiązanie \(\displaystyle{ x=1}\), jeśli nie to nie ma rozwiązania w liczbach całkowitych.
ale czemu mam się ograniczać tylko do \(\displaystyle{ b=a+1}\)? bo np. dla a=3,b=14,x=2?
Awatar użytkownika
Vardamir
Użytkownik
Użytkownik
Posty: 1913
Rejestracja: 3 wrz 2010, o 22:52
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 6 razy
Pomógł: 410 razy

[c++] rozwiązanie równania

Post autor: Vardamir »

Źle popatrzyłem na to co zwraca mi wolfram, to było tylko przykładowe rozwiązanie. Są jakieś ograniczenia na \(\displaystyle{ a,b,x}\) ?
Awatar użytkownika
rochaj
Użytkownik
Użytkownik
Posty: 411
Rejestracja: 3 lip 2012, o 23:51
Płeć: Mężczyzna
Lokalizacja: komp
Podziękował: 128 razy
Pomógł: 2 razy

[c++] rozwiązanie równania

Post autor: rochaj »

Vardamir pisze:Źle popatrzyłem na to co zwraca mi wolfram, to było tylko przykładowe rozwiązanie. Są jakieś ograniczenia na \(\displaystyle{ a,b,x}\) ?
Tylko ze całkowite dodatnie.
Awatar użytkownika
Vardamir
Użytkownik
Użytkownik
Posty: 1913
Rejestracja: 3 wrz 2010, o 22:52
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 6 razy
Pomógł: 410 razy

[c++] rozwiązanie równania

Post autor: Vardamir »

rochaj pisze: Tylko ze całkowite dodatnie.
Aż tyle, wklejaj następnym razem treści zadań bo nie podajesz najważniejszych informacji.

Masz funkcję \(\displaystyle{ f(x)=x^3+ax-b}\), która jest rosnąca. Możesz skorzystać np. z metody bisekcji.
Awatar użytkownika
rochaj
Użytkownik
Użytkownik
Posty: 411
Rejestracja: 3 lip 2012, o 23:51
Płeć: Mężczyzna
Lokalizacja: komp
Podziękował: 128 razy
Pomógł: 2 razy

[c++] rozwiązanie równania

Post autor: rochaj »

Vardamir pisze:
rochaj pisze: Tylko ze całkowite dodatnie.
Aż tyle, wklejaj następnym razem treści zadań bo nie podajesz najważniejszych informacji.

Masz funkcję \(\displaystyle{ f(x)=x^3+ax-b}\), która jest rosnąca. Możesz skorzystać np. z metody bisekcji.
Też myślałem o tej metodzie, ale to zadanie jest w temacie Wyszukiwanie binarne.
Awatar użytkownika
Vardamir
Użytkownik
Użytkownik
Posty: 1913
Rejestracja: 3 wrz 2010, o 22:52
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 6 razy
Pomógł: 410 razy

[c++] rozwiązanie równania

Post autor: Vardamir »

Bisekcja jest wyszukiwaniem binarnym...
Awatar użytkownika
rochaj
Użytkownik
Użytkownik
Posty: 411
Rejestracja: 3 lip 2012, o 23:51
Płeć: Mężczyzna
Lokalizacja: komp
Podziękował: 128 razy
Pomógł: 2 razy

[c++] rozwiązanie równania

Post autor: rochaj »

Vardamir pisze:Bisekcja jest wyszukiwaniem binarnym...
A da się jakoś bez tej metody, bo już próbowałem jakimś naciąganiem żeby się zmieścić w czasie:

Kod: Zaznacz cały

long long row( long a, long b)
{
float f   = ((float)1.0)/(float(3.0));	
long long i=1,k=0;
   do
   {
   	if (i*i*i+a*i==b) 
   	k=i; 
   	i++;
   } while(i<=pow(b,f));
    cout<<k<<endl;	
}
Awatar użytkownika
Vardamir
Użytkownik
Użytkownik
Posty: 1913
Rejestracja: 3 wrz 2010, o 22:52
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 6 razy
Pomógł: 410 razy

[c++] rozwiązanie równania

Post autor: Vardamir »

Przed chwilą mówiłeś, że dział to wyszukiwanie binarne. Teraz nie chcesz z niego korzystać?

Przecież metoda bisekcji dla każdego przypadku wykona co najwyżej 32 sprawdzeń (w zakresie unsigned int), zatem na pewno zmieści się w czasie. Obstawiałbym nawet czas <0.02

To co zamieściłeś będzie strasznie niewydajne, m.in przez korzystanie z potęgi do 1/3.
Awatar użytkownika
rochaj
Użytkownik
Użytkownik
Posty: 411
Rejestracja: 3 lip 2012, o 23:51
Płeć: Mężczyzna
Lokalizacja: komp
Podziękował: 128 razy
Pomógł: 2 razy

[c++] rozwiązanie równania

Post autor: rochaj »

a w jakim przedziale badac?
ODPOWIEDZ