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

PRIME_T - Liczby Pierwsze

VPS Starter Arubacloud
+1 głos
465 wizyt
pytanie zadane 19 lipca 2020 w C i C++ przez Arek04 Użytkownik (700 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 (42,000 p.)
Spójrz jeszcze raz na warunki w pierwszej pętli i wyrażeniach warunkowych.
komentarz 19 lipca 2020 przez Arek04 Użytkownik (700 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 (42,000 p.)
Zmień pierwszy if na x<2, pierwszą pętle na i <= n.
komentarz 20 lipca 2020 przez Arek04 Użytkownik (700 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 (155,460 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 (700 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 (155,460 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 (700 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 2022 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 (251,210 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 593 wizyt
pytanie zadane 10 stycznia 2019 w C i C++ przez Patrykc23 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 306 wizyt
pytanie zadane 7 listopada 2021 w Java przez danielxwbt Nowicjusz (150 p.)
+1 głos
2 odpowiedzi 1,571 wizyt
pytanie zadane 6 października 2021 w Python przez Andrzej Hnatiuk Początkujący (350 p.)

92,454 zapytań

141,262 odpowiedzi

319,089 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!

...