Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di fenics
    Registrato dal
    Aug 2004
    Messaggi
    446

    c stampare 100 numeri primi

    devo svolgere un programma in c che mi stampi i primi 100 numeri primi:
    così io ho fatto:
    codice:
    #include<stdio.h>
    
    int main()
    {
        int vet[100];
        int i, n;
    
        for(i=0; i<100; i++)
        {
            for(i=2; i<100; i++)
            {
                for(n=2; n<=100; n++)
                {
                    if(vet[n%i]==1);
                    vet[n%i]=1;
                }
            }
        }
    }
    e... ma poi non so continuare
    Ultima modifica di fenics; 23-05-2014 a 12:21

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Perché il triplo for? O_o

    Comunque: un numero è primo se non ha divisori a parte 1 e se stesso. Dato un numero X ti basta quindi provare a dividerlo per tutti i numeri che vanno da 2 a X - 1. Se non hai mai resto 0 il numero è primo...

    Come ottimizzazione puoi saltare i numeri pari e puoi fermarti alla radice quadrata di X.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    L'algoritmo che stai cercando di implementare è talmente "nuovo" che era già noto ad Eratostene nel terzo secolo a.C.

    Fai una bella ricerca sul tuo search engine preferito per "crivello di Eratostene": un'ottima occasione per imparare bene una tecnica algoritmica fondamentale, usata anche in centinaia di altre applicazioni analoghe. Il metodo naif delle divisioni successive è ovviamente il massimo dell'inefficienza.
    • Un plauso a Grisha Perelman, raro esempio di genuino anticonformismo umano e scientifico.

  4. #4
    Utente di HTML.it L'avatar di fenics
    Registrato dal
    Aug 2004
    Messaggi
    446
    infatti si tratta proprio di eratostene

  5. #5
    Quote Originariamente inviata da fenics Visualizza il messaggio
    infatti si tratta proprio di eratostene
    Elementare, caro dottor Watson...

    Ma cosa dice codesto algoritmo, certo non efficientissimo ma di facilissima implementazione, nella sua versione di base "carta-e-penna"?

    Fissato un limite arbitrario intero positivo n (significativamente maggiore di due), si compila una tabella contenente ordinatamente tutti i numeri interi positivi strettamente compresi tra 2 e tale n. Quindi, per ogni intero positivo strettamente compreso tra 2 e la radice quadrata di n (approssimata per difetto all'intero, ovviamente!) si "cancellano" dalla tabella tutti i multipli di tale numero.
    I numeri rimanenti dopo questa "setacciatura" sono tutti e soli i numeri primi compresi tra due (primo numero primo e unico primo pari) e il limite dato.

    Tutto chiaro fino a qui? Quel "per ogni" si traduce ovviamente in un ciclo, e "tutti i multipli" in un secondo ciclo annidato.
    Prova intanto ad implementare questa parte, usando uno zero per "cancellare" i valori compositi dalla tabella: per migliorie e ottimizzazioni c'è tempo e modo di procedere per gradi (le due più banali e macroscopiche: i numeri pari possono subito essere esclusi per costruzione, e la "tabella" può essere facilmente implementata come un array grossolanamente booleano, sebbene in modo poco efficiente in spazio).
    • Un plauso a Grisha Perelman, raro esempio di genuino anticonformismo umano e scientifico.

  6. #6
    Utente di HTML.it L'avatar di fenics
    Registrato dal
    Aug 2004
    Messaggi
    446
    come si fa la radice quadrata in c?? Cioè come la calcolo??

  7. #7
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    sqrt da math.h
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  8. #8
    Utente di HTML.it L'avatar di fenics
    Registrato dal
    Aug 2004
    Messaggi
    446
    oddio, allora, io perora ho scannerizzato 2 cicli for annidati in questo modo
    codice:
    #include<stdio.h>
    
    int main()
    {
        int vet[100];
        int i, n;
        
        for(i=0; i<100; i++)
        {
            for(n=2; n<100; n++)
        }
    }

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Scannerizzato?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Utente di HTML.it L'avatar di fenics
    Registrato dal
    Aug 2004
    Messaggi
    446
    ho implementato questo codice per ora, la radice quadrata l'ho calcolata con la funzione pow. ditemi se fin quì va bene
    codice:
    #include<stdio.h>
    #include<math.h>
    
    int main()
    {
        int vet[100];
        int i, n;
    
        for(i=2; i<100; i++)
        {
            for(n=2; n<=100; n++)
            {
                n=pow(100, 2.0f);
            }
        }
    }

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 © 2024 vBulletin Solutions, Inc. All rights reserved.