Mehr Performance



  • Angesteckt von diesem Thread wollte ich auch mal dieses Project Euler probieren.

    Problem 1:

    Wie kann ich die Performance von meinem Code verbessern? Für die obere Grenze von 10000000000ull brauche ich bereits 3,26 Sekunden (lineares Laufzeitverhalten mit limit sowieso).

    // in project euler #1: a = 3, b = 5, limit = 1000
    std::uint64_t sum_multiples(std::uint64_t a, std::uint64_t b, std::uint64_t limit) {
    	using namespace std;
    	uint64_t result = 0;
    
    	for (uint64_t n = 1; n * a < limit; ++n) result += n * a;
    
    	for (uint64_t n = 0, run = true; run; ++n)
    		for (uint64_t x = 1; x < a; ++x)
    			if ((n * a + x) * b < limit) result += ((n * a + x) * b);
    			else run = false;
    
    	return result;
    }
    


  • Every language has an optimization operator. In C++ that operator is ‘//’

    :p



  • Wieviele durch 3 teilbare zahlen gibt es denn bis 1000? Genau 1000/3 (abgerundet) = 333, und was ist deren Summe? Genau 3*(1+2+...+333) = 3*333*334/2.

    Analog für 5. Die durch 15 teilbaren wurden doppelt gezählt, müssen also noch abgezogenw werden. Ergibt insgesamt konstante laufzeit, wir brauchen nichtmal ne schleife.



  • obvious troll is obvious.

    akzeptiere halt dass nicht jeder so gut im bezug auf mathematik / programmierung ist und sich trotzdem in dem forum meldet.


Anmelden zum Antworten