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

Najszybsze obliczanie ilości dzielników liczby

VPS Starter Arubacloud
0 głosów
7,340 wizyt
pytanie zadane 21 kwietnia 2017 w C i C++ przez kacper1445 Mądrala (5,050 p.)

Witam. Mam za zadanie obliczyć ilość dzielników danej liczby. Na wejściu są liczby od 0 do 1000000000.

Taki kodzik nie działa we wszystkich przypadkach (za długi czas pracy przy większych liczbach). 

#include <iostream>

using namespace std;
long long a,b=1;
int main()
{
    cin>>a;
    for(int i=1;i<a;i++)
    {
        if(a%i==0) b++;
    }
    cout<<b;
    return 0;
}

Zna ktoś szybszy sposób?

1 odpowiedź

+2 głosów
odpowiedź 21 kwietnia 2017 przez MetGang Nałogowiec (34,360 p.)
wybrane 21 kwietnia 2017 przez kacper1445
 
Najlepsza

http://www.matematyczny-swiat.pl/2013/02/dzielniki-naturalne-liczby-naturalnej.html

Idea ogólnie jest taka: rozbijasz liczbę na iloczyn liczb pierwszych (prime factorization), bierzesz potęgi poszczególnych liczb i podstawiasz do wzoru (a1 + 1) * (a2 + 1)...

40 = 2^3 * 5^1 -> (3 + 1) * (1 + 1) = 4 * 2 = 8 -> 40 ma 8 dzielników

Sam zaimplementowałem taki algorytm i jest on o wiele szybszy niż ten tutaj przedstawiony.

komentarz 21 kwietnia 2017 przez kacper1445 Mądrala (5,050 p.)

Dzięki wielkie pomogło laugh

Podobne pytania

0 głosów
1 odpowiedź 1,620 wizyt
pytanie zadane 28 lutego 2016 w C i C++ przez Madrox24 Początkujący (350 p.)
0 głosów
1 odpowiedź 2,637 wizyt

93,004 zapytań

141,969 odpowiedzi

321,248 komentarzy

62,340 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 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...