Skrócenie kodu

0
int main(){
    int nr, j=4, i;
    bool arry[10000];
    scanf("%d", &nr);
    for(i=2; i <= ceil(sqrt(nr)); i++, j=i+i){
            if(!arry[i]){
                           while(j<nr){
                                        arry[j]=1;
                                        j+=i;
                           }
            }
    } 
    for (i=2; i<nr; i++) if (arry[i]==0) printf("%d, ",i);
}

Ktoś jest w stanie wykombinować krótszy kod? Nie mam już pomysłu jak skrócić kod :/
Za pomoc dziękuję!

0

po co deklarujesz i (2) jak potem w linijce (5) znowu deklarujesz lokalną i??? Pierwszej w ogóle nie używasz bo cała funkcja int to deklaracje i pętla for. Po drugie czego tag c++? Nie wiedzałem że w c++ używa się scanf ROTFL.

0

for (i=2; i<nr; i++) if (arry[i]==0) printf("%d, ",i);

Po tym widzę, że masz straszne parcie, żeby kod zajmował mniej linii

Możesz na pewno pozbyć się dwóch klamer przy for i przy if. Poza tym, możesz tak jak już uczyniłeś w ostatniej linijce umieścić wszystko w jednej linii.

Możesz również skorzystać zamiast z ifa z wyrażenia ?:

1

Po co skracać kod? Krótszy kod jest lepszy? Lecą na to laski?

Usunięcie { czy pakowanie wszystkiego do jednej linii przyśpiesza wykonanie?

0

Na to lecą nie tylko laski...

while(j<nr){
                      arry[j]=1;
                      j+=i;
}

zastanawiam się jak skrócić tą pętelkę? Nikt nie ma pomysłu.. :/

0
#include <cmath>
#include <cstdio>
#include <cstring>

int main() {
    int nr;
    scanf("%d", &nr);
    unsigned char arry[nr];
    memset(arry, 0, nr);
    for (int i = 2, limit = ceil(sqrt(nr)); i < limit; i++) {
        if (!arry[i]) {
            for (int j = i * 2; j < nr; j += i) {
                arry[j] = 1;
            }
        }
    }
    for (int i = 2; i < nr; i++) {
        if (arry[i] == 0) {
            printf("%d, ", i);
        }
    }
}

Pewnie mnie ktoś zjedzie za używanie VLA, ale mam takich ludzi w D. VLA FTW!

0

Dzięki Wibowit! :)

Jakbyś skrócił poniższą funkcję

void prime_factor(int p, int i){
  for(i = 2; i <= (int)sqrt(p); i++)
  {
    while(!(p % i))
    {
      cout << i << " ";
      p /= i;
    }
    if(p == 1) break;
  }
  if(p > 1) cout << p;
}
0

okay, udało mi się skrócić, jeszcze raz dzięki za pomoc! :)

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