Sprawdzanie czy dane numery są liczbami pierwszym tzn naturalnymi

0

Witam

Na uniwerku dostałem zadanie aby napisać program FizzBuzz.

Działa na tej zasadzie że wykładowca ma generator liczb, i np metoda fizz ma sprawdzić czy dana liczba może być podzielona przez siebie samą oraz przez 9, i potem to samo tylko Buzz, i przez 13. I jest Fizzbuzz czyli czy może być dzielona przez 9 oraz 13, I z tymi funkcjami wszystko jest OK..

Ale, jest jeszcze jedna metoda IsPrime, czyli sprawdza czy liczba jest liczbą pierwszą (naturalną).

mam taki kod na to:

 boolean isPrime(int number) {

    if (number == 1) return false;
    if (number == 2) return true;

    for (int i = 3; i < number; i += 2)  {
       if (number % i == 0) return false;
    }
    countprime++;
    return true;

}

I teraz tak, program wykładowcy sprawdza wszystkie liczby zliczone i pokazuje na końcu czy wyniki są takie same, i fizz, buzz, fizzbuzz wychodzi tak samo za każdym razem czyli to działa, ale prime np u niego wychodzi 1803 a u mnie 6606. Czyli coś mam źle w kodzie tylko co?

0

Siema

if (input <= 1)
{
return false;
}
for (int i = 2; i <= (input / 2); i++)
{
if ((input % i) == 0)
{
return false;
}
}
countprime++;
return true;


Bedzie dzialac na 101%
1

Co to za zmienna countprime? Jeżeli zlicza liczby pierwsze, to pomija liczbę 2.
Wyrzuć warunek

if (number == 2) return true;

Wyniki masz nieprawidłowe dla potęg liczby 2 (4, 8, 16, 32, ...). Sprawdzaj na początku czy liczba jest parzysta.

if ((number > 3) && (number % 2 == 0)) return false;

Pętla może być znacznie krótsza. Wystarczy sprawdzać podzielniki mniejsze lub równe pierwiastkowi testowanej liczby.

int n = (int)Math.Sqrt(number);
for (int i = 3; i <= n; i += 2)
0

Pomijając to, że formatowanie jest okropne, a sam algorytm tak nieoptymalny jak to tylko możliwe, to największym możliwym błędem tej funkcji jest countprime++. Dlaczego funkcja sprawdzająca pierwszość liczby ma mieć jakiś efekt uboczny?

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