Problem z liczbą operacji w zadaniu z liczbami pierwszymi

0

Proszę o pomoc bo nie poprawnie wychodzi wynik l - to liczba operacji. Przykładowo dla 10007 powinno mi wyjść 34 a wychodzi 16 a dla 1000003 334. Chciałbym wiedzieć co muszę poprawić by wynik był prawidłowy

#include <iostream>
using namespace std;


int main() {

    int n, d=5, l=0;
    bool pierwsza;
    cin>>n;
    pierwsza=(n>1);
    if(n>2 && n%2==0) pierwsza=false;
    if(n>3 && n%3==0) pierwsza=false;
    while(pierwsza && (d*d)<=n){
        if(n%d==0) pierwsza=false;
        else if (n%(d+2)==0) pierwsza=false;
            else d=d+6;
        l++;
    }
    cout<<l;
    return 0;
}
0

Dlaczego uważasz, że nieprawidłowo? Ostatnie d jakie wchodzi do pętli, dla n = 10007, to 101, następne, 107 jest już większe od pierwiastka z n; jeśli sama implementacja jest OK, to ilość ilość inkrementacji w pętli, (16) jest poprawna.

2
soilehpa napisał(a):

Proszę o pomoc bo nie poprawnie wychodzi wynik l - to liczba operacji. Przykładowo dla 10007 powinno mi wyjść 34 a wychodzi 16 a dla 1000003 334. Chciałbym wiedzieć co muszę poprawić by wynik był prawidłowy

Liczba operacji czego? żeby co?

1

while(pierwsza && d<=n) i będzie ci 34

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