Liczby Pierwsze

0

Męcze się jakiś czas ale wymyslilem sobie tak: Jeżeli np. 5/4!=5 dalej 5/3!=5 dalej 5/2!=5 dalej 5/1 to już sie równa 5 tzn ze jest to liczba pierwsza i jeżeli tą wartość mi wzraca to należy wyświetlić TAK: Oto mój kod tylko mam problem z 2 pętlą nie wiem co wstawić obok X. W sensie wstawiam tam liczbaTestow[i] ale cos jest nie tak daleczego ?

#include <iostream>

using namespace std;

int main()
{
    int liczbaTestow[100000],n, x;

    cout<<"Podaj ile testow chcialbys przeprowadzic ?: "<<endl;
    cin>>n;

    for(int i=0; i<n; i++)
{
    cout<<"podaj dowolna liczbe calkowita: "<<endl;
   cin>>liczbaTestow[i];
}
//!juz lepiej ale kombinuj dalej !
for (int i=0; i<n; i++)
{

  for(int x=1; x<=**Co tu wstawic zeby było dobrze?**; x++)
  {
      if(liczbaTestow[i]/liczbaTestow[i]-x!=liczbaTestow[i])
      {
          cout<<"nie";
      }
          else
          {
            cout<<"tak";
          }

  }
}
        return 0;
}
0

W ogóle nie rozumiem co piszesz. 4! to 24, jak 5 / 24 ma być równe 5?

0
twonek napisał(a):

W ogóle nie rozumiem co piszesz. 4! to 24, jak 5 / 24 ma być równe 5?

Nie nie oto chodzi to nie jest silnia tylko "różne'' równa się przekreslone na pół ;)

0

Chce żeby program robił to w ten sposób: Pyta się ile chce tych liczb wprowadzić przypuśćmy że chce 3, Następnie wpisuje te liczby. I teraz tak wpisałem jako pierwszą liczbę np 7 i chcę żeby sprawdził czy to jest liczba pierwsza. Jak moge to sprawdzic ? Otóż jeżeli 7 podziele o liczbę jedną mniejszą od niej i pózniej znów jeszcze mniejsza aż tak wkółko do uzykania 7 podzielić na 1 jeżeli miedzy czasie nie wyskoczyła mi jakaś inna liczba całkowita to znaczy że jest to liczba pierwsza przypuśćmy 4:3 jest różne od 4 pózniej 4:2 =2 wiec komputer wyświetla napis NIE, następnie bierzę kolejną liczbę jaka wprowadziliśmy np 5 i robi podobnie 5:4 jest różne od 5 dalej 5:3 jest różne od 5, 5:2 jest rózne od 5 i 5:1=5 więc to jest liczba pierwsza. Wyswietla NAPIS TAK

0

A nie prościej i szybciej zacząć od 2 i skończyć na liczbie mniejszej lub równej pierwiastkowi z badanej? Zainteresuj się tzw sitem.

1

To nie zadziała, bo jeśli masz dwie liczby całkowite, to wynik dzielenia zawsze będzie liczbą całkowitą.
5 / 4 = 1
5 / 3 = 1
5 / 2 = 2
To czego potrzebujesz to modulo % a nie dzielenia.
Czyli w wersji najprymitywniejszej

for (int i = 2; i < liczba; ++i)
    if (liczba % i == 0)
        return "NIE";
return "TAK";
1

Do tego co napisał @twonek sprawdzanie czy dzieli się przez liczby wieksze niz pierwiastek z liczby też nie ma sensu

2

Pójdźmy krok dalej (wystarczy sprawdzić co 2 liczbę).


#include <iostream>
#include <cmath>
using namespace std;

string czypierwsza(int liczba) {
	if (liczba % 2 == 0) 
       return "NIE";	
       
    int limit = sqrt(liczba) + 1;
    
	for (int i = 3; i < limit; i += 2)
	    if (liczba % i == 0)
	        return "NIE";
	        
	return "TAK";
}

int main() {
	do {
		cout << "Podaj liczbe: \n";
		int liczba;
		if (!(cin >> liczba)) 
		   break;
		cout << liczba << " - pierwsza?: " << czypierwsza(liczba) << endl;
	} while(1);
    return 0;
}

https://ideone.com/rvFByc

(jest jeszcze wielokrotnie bardziej optymalna wersja, ale to już nie sito - sprawdzanie tylko liczb pierwszych przy pomocy liczb pierwszych które już były).

1 użytkowników online, w tym zalogowanych: 0, gości: 1