Napisz program, który czyta liczbę naturalną N (nie większą od dwóch miliardów) i i sprawdza, czy jej suma cyfr jest liczbą pierwszą. Program powinien wypisać komunikat "TAK" lub "NIE" (dużymi literami, z końcem wiersza). Na przykład dla liczby 25 program powinien wypisać "TAK", natomiast dla liczby 333 program powinien wypisać "NIE".

1

Odpowiedzi

2009-12-11T17:33:28+01:00
#include <iostream>
#include <conio.h>

bool LiczbaPierwsza(unsigned uLiczba)
{
if (uLiczba == 2) return true;

for (unsigned i = 2; i <= sqrt(uLiczba); ++i)
{
if (uLiczba % i == 0)
return false;
}

return true;
}

void main()
{
unsigned uWartosc;
std::cout << "Podaj liczbe: ";
std::cin >> uWartosc;

if (LiczbaPierwsza(uWartosc))
std::cout << "TAK";
else
std::cout << "NIE";

getch();
}


Proszę, jeśli kompilator wyrzuca warning&#39;a, który dotyczy "getch()", zastąp to funkcją "getchar()", jesli program nie czeka na kliknięcie entera, napisz:
"
getchar();
getchar();
"


Rozwiązanie warte ZDECYDOWANIE zbyt mało punktów, chłopie, zastanów się następnym razem... sam sobie się dziwie dlaczego to napisałem!

BTW. Nie napisałeś w jakim języku programowania ma być ten program...

Aha, i nie miałem okazji kompilacji ale działa na 99.9%.

Pzdr.

EDIT//
zwyczajny int może przechować wartość nieco ponad 2 miliardową. Unsigned zwiększa tą wartość, ponieważ nie przechowuje liczb ujemnych. Możesz zmienić unsigned, na zwykłego inta, ale jeśli tak bardzo Ci zależy na tej 2-miliardowej wartości, to napisz coś w stylu:
if (uWartosc > 2000000000)
exit(1);

Albo zamiast exita, wiadomość informującą o zbyt dużej wartości i ewentualną pętle while, która wymusi podanie prawidłowej wartości.