Wątek przeniesiony 2018-09-03 21:28 z C/C++ przez furious programming.

Czy liczba pierwsza? Błąd w kodzie

0

Witam,
Chciałbym się dowiedzieć, dlaczego w poniższym kodzie, który ma za zadanie sprawdzać, czy liczba a jest liczbą pierwszą, przy wpisaniu 9 wychodzi, że jest to liczba pierwsza. W innych przypadkach chyba nie ma błędu.

#include <iostream>
#include <cstdlib>
#include <cmath>
using namespace std; 

bool czyPierw(int a)
{
	if(a==2) return true;
	for(int x = 2;x<a;x++)
	{
		if(a%x==0) return false;
		return true;
	}
}
int main()
{
	int a;
	cout<<"Podaj liczbe: ";
	cin>>a;
	czyPierw(a);
	if(czyPierw(a) == false) cout<<"Nie"<<endl;
	else cout<<"Tak"<<endl;	
	return 0;
}
2

Używaj debuggera do szukania błędów w czasie wykonywania kodu.

Błąd jest tutaj

if(a%x==0) return false;
        else return true;

Czy rozumiesz jak działają instrukcje warunkowe?

https://www.programiz.com/cpp-programming/examples/prime-number

2

Reszta z dzielenia 9 przez 2 = 1, a zatem leci else i zwrócony true, który wyświetla Tak.

W ogóle zły algorytm i polecam używać klamerek do instrukcji, które mają być wykonane w związku z jakimś warunkiem

{

}
0

Nie to że wychodzi błąd i program się nie kompiluje, jednak wychodzi błędy wynik przy liczbie 9

1
guuren napisał(a):

Nie to że wychodzi błąd i program się nie kompiluje, jednak wychodzi błędy wynik przy liczbie 9

Bo masz trochę farta :P

15 % 2 = 1 i twój kod zwróciłby true, a dzieli się jeszcze przez 3 i 5, więc nie jest Prime

3

Zauważ że pętla for zawsze wykona się tylko raz.

0

Problem rozwiązany, mój błąd ze znakiem
Zamienić z:

  for(int x = 2;x<a;x++)
    {
        if(a%x==0) return false;
        return true;
    }

Na:

  for(int x = 2;x<a;x++)
    {
        if(a%x==0) return false;
    }
        return true;
    
5

wystarczy iterowac do pierwiastka z a zeby sprawdzic czy liczba jest prime, wszystko powyzej tego pierwiastka to zmarnowane operacje

dzielnikow liczby n jest tyle samo po lewej i prawej stronie pierwiastka z n

1 użytkowników online, w tym zalogowanych: 0, gości: 1