Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

losowanie z sprawdzeniem ile liczb to liczby pierwsze

Ostatnio zmodyfikowano 2017-05-20 07:50
Autor Wiadomość
gsmx98
Temat założony przez niniejszego użytkownika
losowanie z sprawdzeniem ile liczb to liczby pierwsze
» 2017-05-20 00:43:22
Witam mam już algorytm do losowania i mam algorytm do sprawdzania ale kleju brak i nie wiem jak to skleić razem.. zalezy mi na czasie bardzo
<code>#include <time.h>
#include <iostream>
using namespace std;
bool czy_pierwsza(int n)
{
  if(n<2)
    return false; //gdy liczba jest mniejsza niż 2 to nie jest pierwszą
 
  for(int i=2;i*i<=n;i++)
    if(n%i==0)
      return false; //gdy znajdziemy dzielnik, to dana liczba nie jest pierwsza
  return true;
}
int main(void)
{
  int zakres,*tab,ile_liczb,n;
  cout<<"podaj z ilu liczb chcesz losowac : ";
  cin>>zakres;
    tab=new int[zakres];
  cout<<"podaj ile liczb chcesz losowac z zakresu od 1 do "<<zakres<<" : ";
  cin>>ile_liczb; 
    time_t t;
    srand((unsigned) time(&t));
for (int n=0; n <zakres; n++)  tab[n] = n+1;
for (int n=0; n <ile_liczb; n++)
  {
   int k=rand()%zakres;
   swap (tab[n], tab[k]); 
  }    

 
cout<<"wylosowano:"<<endl;

    for{(int n=0;n<zakres;n++)cout<< tab[n]<<endl;
    if(czy_pierwsza(n)) //lub czy_pierwsza(n)==1
    cout<<"Liczba "<<n<<" jest pierwsza"<<endl;
  else
    cout<<"Liczba "<<n<<" nie jest pierwsza"<< endl;
    }
  
  delete [] tab; 
return 0;
}</code>
całość wygląda mniej wiecej tak proszę o pomoc
zadanie na wczoraj!
P-161322
latajacaryba
» 2017-05-20 02:43:25
[cpp] kod [/cpp]
Gdzie dokladnie masz problem? Przekazujesz liczbe do funkcji i dostajesz true lub false.
Ps. Algorytm troche slaby. Samą liczbe operacji mozna w nim zmniejszyc dwukrotnie czyms takim:
C/C++
If( liczba % 2 == 0 )
Return false;

For( int i = 3; i < liczba; i += 2 )
{
    If( liczba % i == 0 )
    Return false;
}

Ale masz blad, dokladnie przy zapisie
If(int i = 2; i <= n; i++)
Liczba zawsze jest podzielna przez sama siebie, a w petli 'i' moze byc rowne liczbie. Dlatego funkcja zawsze zwroci Ci true. Popraw na
i < n
P-161323
karambaHZP
» 2017-05-20 07:50:37
Nie trzeba sprawdzać wszystkich liczb. Wystarczy do pierwiastka kwadratowego z liczby. i * i <= liczba

I perwszy warunek liczba < 2 odrzuca liczby, w których nie znajdziemy liczb pierwszych.
P-161325
« 1 »
  Strona 1 z 1