• 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

Object Storage Arubacloud
0 głosów
178 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,000 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,000 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 (194,920 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,000 p.)
komentarz 19 stycznia 2020 przez j23 Mędrzec (194,920 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,000 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ź 330 wizyt
0 głosów
5 odpowiedzi 281 wizyt
pytanie zadane 27 kwietnia 2019 w C# przez Moras Obywatel (1,620 p.)

92,676 zapytań

141,581 odpowiedzi

320,061 komentarzy

62,039 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.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...