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

PRIME_T - Liczby Pierwsze

+1 głos
285 wizyt
pytanie zadane 19 lipca 2020 w C i C++ przez Arek04 Użytkownik (550 p.)

Witam. Próbuję zrobić zadanie ze pl spoja z liczbami pierwszymi. Wydaje mi się, że kod jest dobry, a mimo to występuje jakiś błąd. Z góry dziękuję za pomoc :)

#include <iostream>
using namespace std;

int n, x;

int main()
{
	cin >> n;
	for (int i = 0; i < n; i++)
	{
		cin >> x;
		if (x == 1) { cout << "NIE" << endl; }

		for (int i = 2; i * i <= x; i++)
		{
			if (x % i == 0) cout << "NIE" << endl;
			else
				cout << "TAK" << endl;
		}
	}
}
komentarz 19 lipca 2020 przez tkz Nałogowiec (41,900 p.)
Spójrz jeszcze raz na warunki w pierwszej pętli i wyrażeniach warunkowych.
komentarz 19 lipca 2020 przez Arek04 Użytkownik (550 p.)

Mam wrażenie jakby mi łapało do warunków ilość zestawów czyli tą "trójkę". Ale chyba nie widzę nic w pętli i ifach frown

 

1
komentarz 19 lipca 2020 przez tkz Nałogowiec (41,900 p.)
Zmień pierwszy if na x<2, pierwszą pętle na i <= n.
komentarz 20 lipca 2020 przez Arek04 Użytkownik (550 p.)

if zmieniłem, ale w pierwszym for i=0 wiec to to samo co i=1; i<=n. Dalej jest ten sam błąd. Gdy liczba jest dwucyfrowa to traktuje ją jakby byly to 2 cyfry osobno, a tak nie powinno byc.

#include <iostream>
using namespace std;

int n, x;

int main()
{
	cin >> n;
	for (int i = 0; i <= n; i++)
	{
		cin >> x;
		if (x<2) { cout << "NIE" << endl; }

		for (int i = 2; i * i <= x; i++)
		{
			if (x % i == 0) cout << "NIE" << endl;
			else
				cout << "TAK" << endl;
		}
	}
}

 

komentarz 20 lipca 2020 przez mokrowski Mędrzec (150,940 p.)
A jak już odpowiesz "TAK", to nie warto wyskoczyć z pętli? :)

A jak już odpowiesz "NIE", to warto odpowiadać "NIE" po raz n-ty? :)
komentarz 20 lipca 2020 przez Arek04 Użytkownik (550 p.)

No tak, zapomniałem o break'ach :D

Czy jest jeszcze jakiś sposób, aby program jeszcze bardziej przyspieszyć?

#include <iostream>
using namespace std;

int n, x;

int main()
{
	cin >> n;
	while (n--)
	{
		cin >> x;
		if (x < 2) cout << "NIE\n"; 

		for (int i = 2; i * i <= x; i++)
		{
			if (x % i == 0) { cout << "NIE\n"; break; }
			 else cout << "TAK\n"; break;
		}
	}
}

 

komentarz 20 lipca 2020 przez mokrowski Mędrzec (150,940 p.)
Oczywiście. Sprawdź podzielność przez 2 i podzielność przez 3 (operacja modulo). Wyeliminujesz wszystkie liczby podzielne przez 2, 3 i 6. Stąd wystarczy tylko iść z krokiem X (łatwo wpaść jakie to X) w pętli sprawdzania podzielności.

Oczywiście jeśli nie chcesz zmieniać algorytmu na sito.
komentarz 20 lipca 2020 przez Arek04 Użytkownik (550 p.)
To dziwne :/ Na spoja wrzucam dokładnie ten kod, który jest wyżej i mam błąd rozwiązania. Co może jeszcze być przyczyną skoro odpowiedzi są dobre?
komentarz 7 stycznia przez iuno Nowicjusz (100 p.)

@Arek04, Kod nie kompiluje się na większych liczbach przykładowo takich jak 69, 57,33 więc na Polskim Spoju będzie błąd.

1 odpowiedź

0 głosów
odpowiedź 20 lipca 2020 przez VBService Ekspert (203,050 p.)

Błąd jest chyba w 

for (int i = 2; i * i <= x; i++)

Spróbuj zobaczyć co się dzieje w pętli

#include <iostream>
using namespace std;
 
int n, x;
 
int main()
{
    cin >> n;
    for (int i = 0; i <= n; i++)
    {
        cin >> x;
        cout << "dla x: " << x << "\n";
        if (x<2) { cout << "gdzie i: " << i << " NIE" << endl; }
 
        for (int i = 2; i * i <= x; i++)
        {
            if (x % i == 0) cout << "gdzie i: " << i << " NIE" << endl;
            else
                cout << "gdzie i: " << i << " TAK" << endl;
        }
    }
}

Podobne pytania

0 głosów
2 odpowiedzi 239 wizyt
pytanie zadane 10 stycznia 2019 w C i C++ przez Patrykc23 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 119 wizyt
pytanie zadane 7 listopada 2021 w Java przez danielxwbt Nowicjusz (150 p.)
+1 głos
2 odpowiedzi 771 wizyt
pytanie zadane 6 października 2021 w Python przez Andrzej Hnatiuk Początkujący (310 p.)

89,693 zapytań

138,297 odpowiedzi

309,243 komentarzy

59,623 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...