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

Liczby Pierwsze - SPOJ

Object Storage Arubacloud
0 głosów
533 wizyt
pytanie zadane 15 lipca 2017 w C i C++ przez Kamil Paradowski Użytkownik (620 p.)

Witam, mam pytanie, próbuje napisać kod do zadania "Liczby Pierwsze" ze SPOJ-a, ale mój algorytm i kod chyba nie działają tak jak powinien. Treść zadania brzmi następująco:

 

Mój kod wygląda nastepująco: 

#include <iostream>

int main()
{
    int n;
    short a;
    std::cin>>n;
    for(int i=0;i<n;i++)
    {
        std::cin>>a;
        if (a==1)
            std::cout<<"NIE"<<std::endl;
        else if (a==2 || a==3 || a==5 || a==7 || a==11 || a==13 || a==17 || a==19 || a==23 || a==29 || a==31 || a==37 || a==41 || a==43 || a==47 || a==53)
            std::cout<<"TAK"<<std::endl;
        else if ((a%2==0) || (a%3==0) || (a%5==0) || a%7==0 || a%11==0 || a%13==0 || a%17==0 || a%19==0 || a%23==0 || a%29==0 || a%31==0 || a%37==0 || a%41==0 || a%43==0 || a%47==0 || a%53==0)
            std::cout<<"NIE"<<std::endl;
        else if (a%2>0 || a%3>0 || a%5>0 || a%7>0 || a%11>0 || a%13>0 || a%17>0 || a%19>0 || a%23>0 || a%29>0 || a%31>0 || a%37>0 || a%41>0 || a%43>0 || a%47>0 || a%53>0)
            std::cout<<"TAK"<<std::endl;
    }
    return 0;
}

Spoj mi zgłasza błędną odpowiedź, czy powinienem umieścić po prostu więcej warunków, porównań w ifach czy coś pominałem? Wiem, że można napisać to w inny sposób, ale mój pomysł padł na taki i chciałbym go zrealizować do końca, prosiłbym o jakieś rady w tej kwestii.

2 odpowiedzi

0 głosów
odpowiedź 15 lipca 2017 przez d0n Mądrala (6,440 p.)
Jezeli koniecznie chcesz kontynuowac swoj kod to musisz uwzglednic wszystkie liczby pierwsze od 1 do 10000, czyli brakuje ci jakies 1000 liczb do sprawdzenia.... Ale jest też tak ze jezeli liczba nie jest pierwsza to ma dzielnik mniejszy od jej pierwiastka, więc moglbys sprawdzic czy liczba jest podzielna przez jakakolwiek liczbę pierwsza <= pierwiastek z 10 000 to wtedy nie jest pierwsza, inaczej jest

Ale jakby to powiedziec...  w ten sposob sie nic nie nauczysz,  w zadaniu chodzi o napisanie sila erastotenesa i polecam zrobic to z jego pomoca. =]
1
komentarz 15 lipca 2017 przez Kamil Paradowski Użytkownik (620 p.)
Tak też stwierdziłem, myślałem po prostu, że uda mi się zrobić podając tylko max. kilkanaście porównań a potem reszta liczb jakoś się podzieli do tej 10000-tej liczby...

Dzięki za uświadomienie :)
0 głosów
odpowiedź 17 czerwca 2018 przez karmel222 Nowicjusz (200 p.)

Napisałem coś takiego i w sumie to wydaje mi się że pokazuje poprawnie. Alee no jak wiadomo sądzia wie lepiej.

#include <iostream>
using namespace std;
int x,h,sc=0,j;
string spr(int x)
{
	if(x==1) return "TAK";
	else 
	{
		for(int i=0; i<x; i++){
			j=x-i;
			h=x%j;
			
			if(h==0){
				sc++;
			}
		}
        if(sc==2)
		{
			sc=0;
			return "TAK";
		}
		else
		{
			sc=0;
			return "NIE";
		}
	}
}
int main()
{
	int n;
	cin>>n;
	for(int i=0; i<n; i++)
	{
	cin>>x;
	cout<<spr(x)<<endl;;
	}
	return 0;
}

 

komentarz 17 czerwca 2018 przez niezalogowany
if(x==1) return "TAK";

Podobne pytania

0 głosów
1 odpowiedź 192 wizyt
pytanie zadane 13 października 2019 w C i C++ przez Bartek K. Nowicjusz (230 p.)
0 głosów
2 odpowiedzi 576 wizyt
pytanie zadane 1 lipca 2018 w SPOJ przez Fernokip Nowicjusz (180 p.)
0 głosów
2 odpowiedzi 552 wizyt
pytanie zadane 28 lutego 2019 w C i C++ przez niezalogowany

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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!

...