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

Liczby pierwsze

Object Storage Arubacloud
0 głosów
394 wizyt
pytanie zadane 21 czerwca 2019 w C i C++ przez magda_19 Gaduła (3,080 p.)

Próbuję rozwiązać zadanie ze Spoja dotyczące liczb pierwszych. Zarówno kompilator jak i serwis Ideone kompilują poprawnie, a Spoj wyrzuca błąd. Oto mój kod: 

#include <iostream>
#include <math.h>

using namespace std;

int main()
{
    int liczbaTestow, liczba_Dzielnikow, liczby, x;

    cin>>liczbaTestow;

    for(int i = 1; i<=liczbaTestow; i++)
    {
        cin>>liczby;
        x = liczby / sqrt(liczby);

        if(liczby>=2 && liczby % x !=0)
        cout<< "TAK"<<endl;
        else
        cout<< "NIE"<<endl;

    }

    return 0;
}

 

komentarz 21 czerwca 2019 przez adrian17 Ekspert (344,860 p.)
Jaki błąd?
komentarz 21 czerwca 2019 przez magda_19 Gaduła (3,080 p.)
Spoj pokazuje błędna odpowiedź. To wszystko
komentarz 21 czerwca 2019 przez adrian17 Ekspert (344,860 p.)
Ah :)

No to udana kompilacja oznacza tylko że program w ogóle ma sens i da się go uruchomić, nie oznacza że sama logika programu ma sens ;)

A jaka jest treść zadania?
komentarz 21 czerwca 2019 przez magda_19 Gaduła (3,080 p.)
Sprawdź, które spośród danych liczb są liczbami pierwszymi

Input

n - liczba testów n<100000, w kolejnych liniach n liczb z przedziału [1..10000]

Output

Dla każdej liczby słowo TAK, jeśli liczba ta jest pierwsza, słowo: NIE, w przeciwnym wypadku.
komentarz 21 czerwca 2019 przez adrian17 Ekspert (344,860 p.)
No to... powiem tylko, że ten kod nie sprawdza czy liczba jest pierwsza. Polecam po prostu jeszcze trochę poczytać o liczbach pierwszych i ich sprawdzaniu ;)

1 odpowiedź

0 głosów
odpowiedź 21 czerwca 2019 przez p099 Mądrala (6,390 p.)

Kod nie sprawdza czy liczba jest liczbą pierwszą. Polecam przyjrzeć się temu kodowi:

#include<iostream>
#include<cstdlib>
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()
{
	int n;
	
	cout<<"Podaj liczbę: ";
	cin>>n;
	
	if(czy_pierwsza(n)) //lub czy_pierwsza(n)==1
		cout<<"Liczba "<<n<<" jest pierwsza"<<endl;
	else
		cout<<"Liczba "<<n<<" nie jest pierwsza"<<endl;
	
	system("pause");
	return 0;
}

 

komentarz 21 czerwca 2019 przez mrspock1 Mądrala (6,420 p.)
Jeśli liczba nie jest liczbą pierwszą, to jej dzielniki zawsze są wszystkie liczbami pierwszymi bo inaczej dzielniki można przedstawić w postaci iloczynu liczb pierwszych. Sprawdzanie wszystkich dzielników nie ma sensu bo potrwa sto razy dłużej. Matematyka naprawdę przydaje się w szkole.
komentarz 21 czerwca 2019 przez p099 Mądrala (6,390 p.)
Czytanie ze zrozumieniem także się przydaje w szkole, "Tą drugą opcje można rozwiązać na kilka sposobów, od dzielenia aż po wektory lub nawet rozkłady liczb."

W sumie logicznie każda liczba która nie jest liczbą pierwszą jest liczbą pierwszą, ponieważ przed końcem rozkładu tej liczby zawsze znajduje się liczba pierwsza, czyli przed uzyskaniem jedynki.
komentarz 21 czerwca 2019 przez mrspock1 Mądrala (6,420 p.)
każda liczba która nie jest liczbą pierwszą jest liczbą pierwszą,

 

Ty się dobrze czujesz?
komentarz 21 czerwca 2019 przez p099 Mądrala (6,390 p.)
(Logicznie), chyba napisałem paratekstowo? Liczba 21 nie jest liczbą pierwszą, po rozkładzie otrzymujemy: 21 | 3 7 | 7 1 | 0 czyli jak pisałem, przed końcem rozkładu mamy liczbę pierwszą, czyli 7 jest liczbą pierwszą i nawet nie musimy tego sprawdzać.
komentarz 21 czerwca 2019 przez p099 Mądrala (6,390 p.)

Strona mi rozjechała rozkład :), powinno być:

  1. 21 = 3 (początek)
  2. 7 = 7 (liczba pierwsza)
  3. 1 = 0 (koniec)

Podobne pytania

0 głosów
0 odpowiedzi 197 wizyt
pytanie zadane 1 sierpnia 2023 w C i C++ przez Jakub005 Początkujący (310 p.)
0 głosów
1 odpowiedź 468 wizyt
pytanie zadane 22 maja 2023 w C i C++ przez KarmazynowyKaraś Nowicjusz (240 p.)
0 głosów
1 odpowiedź 388 wizyt

92,552 zapytań

141,399 odpowiedzi

319,534 komentarzy

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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...