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

Program obliczający liczby pierwsze

Object Storage Arubacloud
0 głosów
663 wizyt
pytanie zadane 17 grudnia 2017 w C i C++ przez MateuszStawski Nowicjusz (140 p.)
Witam, zrobiłem program, który stwierdza czy wpisana liczba jest pierwszą czy nie. Napotkałem problem, ponieważ po wpisaniu liczby od większej od 8 wypisuje kilka odpowiedzi. Np wpisuje 9 i wychodzi TAK NIE. Jak zrobić by pokazywało tylko jedną odpowiedź?

program:

https://ideone.com/BvUCrR

1 odpowiedź

0 głosów
odpowiedź 17 grudnia 2017 przez niezalogowany
edycja 17 grudnia 2017
if (liczba%i == 0)
{
	cout << "NIE" << endl;
}
else
{
	cout << "TAK" << endl;
}

Nie możesz po sprawdzeniu podzielności jednej liczby od razu napisać NIE. Musisz pętlą sprawdzić cały zakres i jeżeli żadne z liczb nie było podzielne dopiero wtedy napisać TAK. Najłatwiej zrobić to za pomocą funkcji, ale w mainie też da się zrobić znając bool i break:

#include <iostream>
using namespace std;

int main()
{
	int tests;
	cin >> tests;
	for (int i = 0; i < tests; i++)
	{
		int number;
		cin >> number;
		if (number < 2)
		{
			cout << "NIE" << endl;
		}
		else
		{
			bool isPrime = true;
			for (int i = 2; i*i <= number; i++)
			{
				if (number % i == 0)
				{ 
					isPrime = false;
					break; // przerwanie petli - po co szukac dalej skoro wiadomo ze nie jest?
				}
			}

			if (isPrime) 
				std::cout << "TAK" << std::endl;
			else
				std::cout << "NIE" << std::endl;

			// lub std::cout << (isPrime ? "TAK" : "NIE") << "\n";
		}

	}
	return 0;
}

Wersja z funkcją i std::sqrt:

#include <iostream>
#include <cmath>

bool is_prime(int num)
{
	if (num < 2)
	{
		return false;
	}

	for (int i = 2; i <= std::sqrt(num); i++) // domyslne wyjdzie bez rzutowania na float i zaokraglanie ceil
	{
		if (num % i == 0)
		{
			return false;
		}
	}
	return true;
}

int main()
{
	int tests;
	std::cin >> tests;
	for (int i = 0; i < tests; i++)
	{
		int number;
		std::cin >> number;
		std::cout << (is_prime(number) ? "TAK" : "NIE") << "\n";
	}
}
komentarz 17 grudnia 2017 przez MateuszStawski Nowicjusz (140 p.)
A jak wyglądałoby to w funkcji?
komentarz 17 grudnia 2017 przez niezalogowany
Akurat wrzuciłem edycję :)
komentarz 17 grudnia 2017 przez MateuszStawski Nowicjusz (140 p.)
Super, dziękuję za pomoc.

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ź 387 wizyt

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

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

...