Liczby pierwsze

0

Zastanawiałem się czy dać to do Newbie, ale w końcu mówimy tu o algorytmie. Robiąc zadania ze spoja, trafiłem na takie z liczbami pierwszymi. Słyszałem o Sicie Eratostenesa, ale postanowiłem samemu temu podołać i ułożyłem taki algorytm:

 public class LPP {
	
	LPP()
	{
		for(int i = 1; i < 100; i++)
		{
			System.out.println(i + " " + ifOne(i));
		}
	}
	
	public boolean ifOne(int a)
	{
		int zp = 0;
		for(int i = 1; i < a; i++)
		{
			if (a%i == 0)
			{
				zp = zp + 1;
			}
		}
		if (zp == 1)
			return true;
		else
			return false;
	}

}

Jest on moim zdaniem prostszy od sita. Czy wg Was ma on jakieś wady czy mogę go używać w dalszych zadaniach ?

0

Chyba najmniej wydajny algorytm jaki w życiu widziałem.

  1. Jeżeli liczba a ma dzielnik, to ma również dzielnik <= sqrt(a).
  2. Jeżeli liczba dzieli się przez 2 (3,4,...), to nie jest pierwsza. Sprawdzanie należy skończyć.
2

Operacja dzielenia modulo jest bardzo powolna. Ten algorytm nie ma szans z sitem.

Jeśli się upierasz przy takim podejściu, to można to trochę poprawić dzieląc tylko przez znane liczby pierwsze, a nie przez każdą.

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