[c++] rozwiązanie równania
- rochaj
- 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
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ć?
- rochaj
- 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
Aha zapomniałem dodać że nie można używać tych wzorów.luka52 pisze:Zamiast sprawdzać każdy \(\displaystyle{ x}\) można sprytniej: ... nonicznych
- Vardamir
- 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
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.rochaj pisze:Aha zapomniałem dodać że nie można używać tych wzorów.
Wolfram mówi, że rozwiązanie jest w liczbach całkowitych, gdy \(\displaystyle{ b=a+1}\). To jest kod do sprawdzaczki?
- rochaj
- 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
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.Vardamir pisze: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.rochaj pisze:Aha zapomniałem dodać że nie można używać tych wzorów.
Wolfram mówi, że rozwiązanie jest w liczbach całkowitych, gdy \(\displaystyle{ b=a+1}\). To jest kod do sprawdzaczki?
- Vardamir
- 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
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.
- rochaj
- 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
ale czemu mam się ograniczać tylko do \(\displaystyle{ b=a+1}\)? bo np. dla a=3,b=14,x=2?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.
- Vardamir
- 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
Ź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}\) ?
- rochaj
- 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
Tylko ze całkowite dodatnie.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}\) ?
- Vardamir
- 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
Aż tyle, wklejaj następnym razem treści zadań bo nie podajesz najważniejszych informacji.rochaj pisze: Tylko ze całkowite dodatnie.
Masz funkcję \(\displaystyle{ f(x)=x^3+ax-b}\), która jest rosnąca. Możesz skorzystać np. z metody bisekcji.
- rochaj
- 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
Też myślałem o tej metodzie, ale to zadanie jest w temacie Wyszukiwanie binarne.Vardamir pisze:Aż tyle, wklejaj następnym razem treści zadań bo nie podajesz najważniejszych informacji.rochaj pisze: Tylko ze całkowite dodatnie.
Masz funkcję \(\displaystyle{ f(x)=x^3+ax-b}\), która jest rosnąca. Możesz skorzystać np. z metody bisekcji.
- rochaj
- 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
A da się jakoś bez tej metody, bo już próbowałem jakimś naciąganiem żeby się zmieścić w czasie:Vardamir pisze:Bisekcja jest wyszukiwaniem binarnym...
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;
}
- Vardamir
- 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
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.
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.