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

co sądzicie o tym kodzie / algorytmie

VPS Starter Arubacloud
0 głosów
200 wizyt
pytanie zadane 23 lutego 2017 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)

hej , ostatnio stworzyłem program wyświetlający kolejno liczby pierwsze tyle razy ile poda użytkownik .

Co twierdzicie o kodzie tego programu ?? czy według was jest czytelny czy mógłbym coś jeszcze poprawić ? coś spróbować zrobić? jestem początkujący więc dość się namęczyłem nad tym z pozoru "prostym" algorytmem (:

czy są jakieś bardziej wydajne sposoby na szukanie liczb pierwszych ?

dziękuje za pomoc (:

#include <iostream>
#include <windows.h>

using namespace std;

int number = 1;
int zakres;
int licznik = 1;

void first_number(int &licznik)
{
    int mod;

    if(number==1 || number==2)
    {
        cout<<"                                   "<<number<<endl;
    }

    else
    {
        for(int i=number-1; i>1; i--)
        {
            mod = number%i;

            if(mod==0)
            {
                break;
            }
        }

        if(mod==1)
        {
            cout<<"                                   "<<number<<endl;
            licznik++;
        }
    }
}

int main()
{
    system("color 0b");

    cout<<"ile liczb kolejno liczb pierwszych mam  przedstawic ? : ";
    cin>>zakres;

    cout<<endl;

    while(true)
    {
        first_number(licznik);
        number++;
        if(licznik==zakres) break;
    }

    return 0;
}

 

komentarz 24 lutego 2017 przez Pajdas Mądrala (5,930 p.)
Liczby pierwsze (poza pierwszymi dwoma) mają w liczbie jedności cyfrę 1;3;7;9.

Wykluczając liczby zyskasz dużo mocy obliczeniowej.

Poza tym pamiętaj o cechach podzielności przez 3,4,6,7,9

2 odpowiedzi

+1 głos
odpowiedź 23 lutego 2017 przez Michał628496 Pasjonat (17,340 p.)
wybrane 23 lutego 2017 przez Jakub 0
 
Najlepsza
Tak naprawdę najszybszym sposobem sprawdzenia czy liczba jest pierwsza jest sprawdzenie czy nie dzieli się przez liczby pierwsze mniejsze od siebie. Jeśli generujesz te liczby od 2 to wystarczy przechować w w jakiejś tablicy już wygenerowane liczby. Jeśli liczba jest pierwsza to zapisać do tablicy.
komentarz 23 lutego 2017 przez Jakub 0 Pasjonat (23,120 p.)

Tak naprawdę najszybszym sposobem sprawdzenia czy liczba jest pierwsza jest sprawdzenie czy nie dzieli się przez liczby pierwsze mniejsze  od siebie

dzięki , o tym nie pomyślałem ...

tyle że dla mnie trochę kłopotliwe było by napisanie takiego algorytmu co dzieli liczbę przez wcześniejsze liczby pierwsze  , ale może sobie jakoś poradzę (:

komentarz 24 lutego 2017 przez Dooky Początkujący (480 p.)
#include <iostream>
bool czyPodzielna(int liczba,int dzielnik);
bool czyPierwsza(int liczba);
using namespace std;
int main()
{
int ile_liczb;
cout<<"Zakres poszukiwan od 0 do ? :";
cin>>ile_liczb;
for (int i=1;i<ile_liczb;i++)
{
    if (czyPierwsza(i)) cout<<i<<endl;
}
}
bool czyPierwsza(int liczba)
{
    for (int i=2;i<liczba;i++)
    {
        if ( czyPodzielna (liczba,i)) return 0;
    }
    return 1;
}
bool czyPodzielna(int liczba,int dzielnik)
{
    return liczba%dzielnik==0;
}

 

komentarz 24 lutego 2017 przez Michał628496 Pasjonat (17,340 p.)

W funkcji czyPierwsza  wystarczy sprawdzać dla i <= pierwiastka z liczby

komentarz 24 lutego 2017 przez Michał628496 Pasjonat (17,340 p.)
edycja 24 lutego 2017 przez Michał628496

A co do sprawdzania czy się dzieli przez inne liczby pierwsze,

Czemu to miałoby być kłopotliwe ?



A[] //Tablica już gotowych liczb pierwszych (wektor)
L // Ilość liczb w tej tablicy

bool czyPierwsza(int liczba)
{
for(int i = 0; i < L; i++)
{
//EDIT (mały błąd :) )
if(liczba % A[i] == 0)return false;
}

//Kod dodający liczbę do tablicy 

return true;
}


 

komentarz 24 lutego 2017 przez Jakub 0 Pasjonat (23,120 p.)
dzięks (:
komentarz 24 lutego 2017 przez Michał628496 Pasjonat (17,340 p.)
Zrobiłem mały bląd , zamiast A[i] wpisałem i , już poprawiłem .
+1 głos
odpowiedź 23 lutego 2017 przez Benek Szeryf (90,690 p.)
edycja 23 lutego 2017 przez Benek

czy są jakieś bardziej wydajne sposoby na szukanie liczb pierwszych ?

Tak, sito Erastotenesa. Sprawdź ten post.

void first_number(int &licznik)
{
 ...
}

Poza tym co to za konstrukcja? Zmienne definiuj w bloku funkcji main().

Podobne pytania

+4 głosów
3 odpowiedzi 509 wizyt
pytanie zadane 16 kwietnia 2017 w Nasze projekty przez BelethBeny Początkujący (300 p.)
+2 głosów
1 odpowiedź 331 wizyt
0 głosów
2 odpowiedzi 244 wizyt
pytanie zadane 15 września 2016 w C i C++ przez Andrew Fischer Nowicjusz (210 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...