Strona 1 z 2

[c++] rozwiązanie równania

: 22 gru 2014, o 07:38
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ć?

[c++] rozwiązanie równania

: 22 gru 2014, o 07:54
autor: luka52
Zamiast sprawdzać każdy \(\displaystyle{ x}\) można sprytniej: ... nonicznych

[c++] rozwiązanie równania

: 22 gru 2014, o 07:58
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.

[c++] rozwiązanie równania

: 22 gru 2014, o 08:01
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?

[c++] rozwiązanie równania

: 22 gru 2014, o 08:12
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.

[c++] rozwiązanie równania

: 22 gru 2014, o 08:27
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.

[c++] rozwiązanie równania

: 22 gru 2014, o 08:35
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?

[c++] rozwiązanie równania

: 22 gru 2014, o 08:40
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}\) ?

[c++] rozwiązanie równania

: 22 gru 2014, o 08:46
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.

[c++] rozwiązanie równania

: 22 gru 2014, o 09:05
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.

[c++] rozwiązanie równania

: 22 gru 2014, o 09:09
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.

[c++] rozwiązanie równania

: 22 gru 2014, o 09:15
autor: Vardamir
Bisekcja jest wyszukiwaniem binarnym...

[c++] rozwiązanie równania

: 22 gru 2014, o 09:22
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;	
}

[c++] rozwiązanie równania

: 22 gru 2014, o 09:38
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.

[c++] rozwiązanie równania

: 22 gru 2014, o 09:56
autor: rochaj
a w jakim przedziale badac?