Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [Java] Numeri primi

  1. #1

    [Java] Numeri primi

    Ho il seguente codice java che trova i numeri primi, ma non riesco proprio a capirlo. Chi di buona volontà me lo spiega?

    Grazie.

    -----

    static void NumPrimi0(int n)
    {
    int cnt = 0;
    int[]np=new int[n*n+1];

    for(int i = 0; i <= n * n; i++)
    np[i] = i;

    for(int i=2;i<=n;i++)
    {
    if (np[i] != 0)
    {
    for(int j = 2 * i; j <= n * n; j = j + i)
    np[j] = 0;
    }
    }

    for(int i = 2; i <= n * n; i++)
    {
    if (np[i] != 0) {
    System.out.printf("%10d", i);

    if (++cnt >= 10) {
    System.out.println();
    cnt = 0;
    }
    }
    }
    }

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Moderazione

    Java viene trattato nell'apposito sub-forum.


    Ti sposto.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    molto semplicemente inizializza un array con tutti i numeri da 0 a n*n in ordine crescente.

    Dopodiché per ogni valore contenuto nell'array, scandisce tutto l'array accedendo alle locazioni in cui ci sono tutti i multipli di quel numero e li mette a 0 in quanto sicuramente non sono numeri primi. e fa questo per tutti i numeri dell'array.

    in ogni caso questo algoritmo fa un notevole spreco di memoria, in quanto utilizza n*n locazioni, che in realtà non sono necessarie. Lui le utilizza in quanto nel ciclo interno lui elimina tutti i multipli di tutti i numeri da 1 a n (anche tutti i multipli di n), in modo da non incorrere in accessi fuori range.

    Questa è una versione non ottimizzata del crivello di Erastotene, un algoritmo appunto per trovare tutti i numeri primi minori di un certo valore.

    Guarda qui :

    Numeri primi

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.