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

Dzielniki naturalne liczby

Object Storage Arubacloud
0 głosów
1,303 wizyt
pytanie zadane 13 stycznia 2017 w C i C++ przez kmarcin Użytkownik (590 p.)

Witam, mam do napisania program który zwraca dzielniki naturalne podanej liczby. Oczywiście bardzo prosty program, jednak poniższy kod wykonuje się zbyt wolno, ma ktoś pomysł co należy zrobić aby program wykonywał się szybciej?

#include <cstdlib>
#include <iostream>
#include <conio.h>
 
using namespace std;
 
int main()
{
 int x = 0;
 
cout << "Wprowadz liczbe : ";
 cin >>x;
 
 for(int i=1;i<=x;i++)
 {
 if (x % i ==0) cout << i<<" ";
 }

 getch();
}

 

3 odpowiedzi

+2 głosów
odpowiedź 13 stycznia 2017 przez Michał628496 Pasjonat (17,340 p.)
wybrane 13 stycznia 2017 przez kmarcin
 
Najlepsza
Mozesz liczyć liczby tylko do pierwiastka z x i podzielić przez x (chyba że jest kwadratem) i zapisać w tablicy
komentarz 13 stycznia 2017 przez kmarcin Użytkownik (590 p.)
Jeśli mógłbyś troszkę jaśniej to byłbym wdzięczny, bo jak narazie nie łapie co daje mi liczenie do pierwiastka z liczby.

A jeśli chodzi o zapis do tablicy to potrzebna jest druga pętla, zeby zapisywalo po kolei?
komentarz 13 stycznia 2017 przez Michał628496 Pasjonat (17,340 p.)
Z tego co widzę kolega już odpowiedział bardziej szczegółowo , jednak też napisze tutaj :)

Masz pętle od 2 do pierwiastka z x :

Bierzesz i ( licznik pętli) i jeśli x jest podzielne przez i to wpisujesz i do tablicy

Jeśli x/i != i to wpisujesz także x/i

Co do tablicy to możesz utworzyć tablice na np 10000 elementów w zależności od zakresu liczb i przechowywać w jakiejś zmiennej ostatnie wolne pole , które zwiększają przy wpisaniu czegokolwiek do tablicy

Jeśli chcesz mieć te liczby od najmniejszej do największej to wystarczy że posortujesz tablicę
komentarz 13 stycznia 2017 przez kmarcin Użytkownik (590 p.)
Dzięki wielkie, już załapałem idee.
+2 głosów
odpowiedź 13 stycznia 2017 przez morele123 Gaduła (4,790 p.)
No po pierwsze to nie musisz sprawdzać jak masz liczbę n, to n razy, a jedynie do jej pierwiastka kwadratowego. Po za tym dużo wydajniej byłoby zamiast sprawdzanie kolejno 2,3,4,5 ... to :

tablica - zbiór dzielników

znajdujesz dzielnik liczby i dodajesz do tablicy,

liczbę dzielisz na dzielnik i otrzymaną wartość przypisujesz do liczby i liczbę przypisujesz do tablicy

i tak do czasu aż liczba będzie równa 1.
+2 głosów
odpowiedź 13 stycznia 2017 przez MyWash Bywalec (2,640 p.)
Ewentualnie możesz też na początku sprawdzić czy jest podzielna przez 2 to będziesz miał juz dwa razy mniej liczb do sprawdzenia.

Podobne pytania

0 głosów
1 odpowiedź 315 wizyt
pytanie zadane 30 sierpnia 2018 w C i C++ przez hans001 Obywatel (1,150 p.)
–1 głos
1 odpowiedź 488 wizyt
pytanie zadane 17 czerwca 2018 w C i C++ przez Halpi Początkujący (300 p.)
0 głosów
2 odpowiedzi 791 wizyt
pytanie zadane 22 listopada 2016 w C i C++ przez dudu2002 Początkujący (330 p.)

92,579 zapytań

141,432 odpowiedzi

319,657 komentarzy

61,963 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

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!

...