• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Potrzebna pomoc przy rzyspieszeniu pracy funkcji matematycznej w programach

Aruba Cloud - Virtual Private Server VPS
0 głosów
249 wizyt
pytanie zadane 18 stycznia 2020 w C i C++ przez BloodyBoy89 Początkujący (440 p.)

Mam dwa programy do wyliczania ktore dzialaja tylko dla malych liczb gdy wrzucam porgramy na strone wywala mi blad o przekroczeniu czasu wykonywania programu

 

1 Program do wyznaczania 1*2^2 + 2*3^2 + ... + n(n+1)^2 na wejscie dajemy np 1 2 (gdzie 1 oznacza ilosc liczb ktore trzeba wstawic do wzoru (zawsze jest to 1 liczba) a w ta liczbe)

#include <iostream>
#include<math.h>

using namespace std;

int main()
{
          {

            int n,i,jeden;
            long long x=0;

    cin>>jeden>>n;

    for (i = 1; i <= n; i++)
    {
        x=(x+(i*(pow((i+1),2))));

}
   cout<<x<<" ";

        }
}

Nie wyrabia sie w czasie dla duzego n

 

2 Program do zliczania bitow 1 w danej liczbie na wejscie dajemy np 2 3 4 (2 oznacza iosc liczb a 3 i 4 liczby do przeliczenia)

#include <iostream>
#include<math.h>

using namespace std;

int main()
      {


        int test,liczba;
            cin >> test;

    for(int i=0; i<test; i++)
    {
        cin >> liczba;

        for (int i=2; i<=liczba; i++)
        {
            if (liczba%i==0)
                {
                if (i==liczba) cout<<"1"<<" ";
                else cout<<"0"<<" ";
                break;
            }

        }

 }

     }

Nie wyrabia sie dla duzej lizcby

komentarz 18 stycznia 2020 przez tkz Nałogowiec (42,020 p.)
Podaj polecenia tych zadań...
komentarz 18 stycznia 2020 przez BloodyBoy89 Początkujący (440 p.)

dla 1

Wyznacz wartość wyrażenia 1*2^2 + 2*3^2 + ... + n(n+1)^2 dla zadanego n.

 

dla 2

 Zlicz liczbę ustawionych bitów w liczbie naturalnej (unsigned).
komentarz 18 stycznia 2020 przez tkz Nałogowiec (42,020 p.)

https://en.wikipedia.org/wiki/Hamming_weight

Pierwsze pewnie da się obliczyć z jakiejś zależność.

komentarz 18 stycznia 2020 przez j23 Mędrzec (195,240 p.)

@BloodyBoy89,  w drugim zadaniu masz obliczyć ilość zapalonych bitów, a nie konwertować liczbę do postaci binarnej.

unsigned int v = 666; // przykładowa liczba
int sum = 0;
    
while (v > 0) {
    if (v & 1) ++sum;
    v >>= 1;
}

Wydaje mi się, że to zadanie było już w tym tygodniu na tym forum...

1 odpowiedź

0 głosów
odpowiedź 18 stycznia 2020 przez adam_jankowski Mądrala (5,970 p.)
wybrane 18 stycznia 2020 przez BloodyBoy89
 
Najlepsza
W pierwszym programie możesz użyć rekurencji, czyli funkcja ma wywoływać samą siebie w celu zwrócenia prawidłowego wyniku. Zauważ, że gdyby funkcja obliczała tylko jedną część całego dodawania (np. 2*3^2, lub 1*2^2), a jej parametrem byłaby liczba n, oznaczającą, ostatnią część dodawania, to wtedy oblicz(4), byłoby równe oblicz(3) + 4*5^4

 

Jeśli nie będziesz mógł sobie poradzić, napisz. Chętnie pomogę :)
komentarz 18 stycznia 2020 przez tkz Nałogowiec (42,020 p.)
komentarz 19 stycznia 2020 przez j23 Mędrzec (195,240 p.)

@tkz, błędnie zaimplementowałeś wersję rekurencyjną - potęgowanie jest zawsze do kwadratu, a Ty dałeś do N.

 

Tu z moją wersją zwykla2 -> http://quick-bench.com/-lwtGOGpH2Qr55UxJvygYg8bjEM

komentarz 19 stycznia 2020 przez tkz Nałogowiec (42,020 p.)
Fakt, moje przeoczenie, co nie zmienia faktu, że wersja rekurencyjna jest i tak wolniejsza. Szczególnie od Twojej implementacji, bo aż 9 razy.

Podobne pytania

0 głosów
1 odpowiedź 420 wizyt
0 głosów
5 odpowiedzi 370 wizyt
pytanie zadane 27 kwietnia 2019 w C# przez Moras Obywatel (1,620 p.)

93,277 zapytań

142,276 odpowiedzi

322,282 komentarzy

62,595 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...