Numeri primi senza while o for

di Anonimizzato30929 il
15 risposte
Buongiorno
volevo chiedervi un aiuto:
è possibile scrivere un programma in c++ che calcola i primi N numeri primi senza usare il for o il while?
E se sì, come si risolve?
Grazie.

15 Risposte

  • 
    #include <stdio.h>
    #define N_MAX 100
    int main(){
    int d, i = 2, p = 0;
    start:
        d = 2;
    loop:
        if(d >= i - 1){
            printf("%d\n", i);
            p++;
            goto next;
        }
        else if(i % d++ == 0)
            goto next;
        goto loop;
    next:
        i++;
        if(p < N_MAX)
            goto start;
    return 0;
    }
    
  • Grazie mille!
    L'unico dubbio che ho è come posso sostituire gli start e i goto visto che non li abbiamo ancora studiati.
  • È compatibile col C++
  • L'unico dubbio che ho è come posso sostituire gli start e i goto visto che non li abbiamo ancora studiati.
  • Li sostituisci con dei for o while ma dato che non puoi devi usare la ricorsione
  • oregon ha scritto:


    Li sostituisci con dei for o while
    Esatto
  • Ho capito! grazie!
  • Scusate se ci ritorno ... ma non si potrebbe fare con degli if magari annidati?
    Ed eventualmente, con il for come si fa?
    Grazie!
  • Quindi il problema è che non vuoi studiare?
    Lo devi fare da solo: sono due righe in croce.

    Che poi basterebbe una ricerchina su google o sul forum stesso
  • Non è quello il problema!
    è che volevo capire se ci fosse un modo diverso di fare quell'esercizio!
    E vedere come si fa con il for perchè vado non ho capito come ciclare gli N numeri (che siano 10-20-50-100) dato che, ad esempio, i primi 10 numeri primi non equivalgono ai primi 10 numeri ... e allora cercavo di capire quanti numeri mettere nel for!
    Solo per questo volevo vedere il codice con il for!
    Questo postato sopra, l'ho capito ma non tantissimo perchè non ho ancora fatto questi loop e goto.
  • 
    #include <cstdio>
    #define N 100
    bool primo(int n){
        for(int d = 2; d < n; d++)
            if(n % d == 0)
                return false;
        return true;
    }
    int main(){
        for(int p = 0, i = 2; p < N; primo(i) ? p++, printf("%d\n", i++) : i++);
        return 0;
    }
    
  • Ma perché non provi a scrivere il codice con il for re poi se ne discute? Sinceramente non lo capisco perchè attendere che altri ti scrivano il codice
  • Hai ragione! E l'ho fatta così con il for. L'ho fatta per i primi 50 numeri fermando il contatore al 50° numero primo.
    In alternativa si poteva prendere un numero più piccolo/grande e ne calcolava di più/di meno.
    Mi è stato d'aiuto il primo codice postato perchè non sapevo bene come verificare il numero primo ma ci sono riuscito!
    Grazie mille per l'aiuto e lo sprono a fare da solo!


    #include <iostream>
    using namespace std;

    int main(){

    int numero;
    int resto;
    int contatore;

    cout<<"I primi 50 numeri primi sono: " << endl;

    for(int i=1;i<=227;i++)
    {
    contatore=0;

    for(int j=1;j<=i;j++)
    {
    resto=i%j;

    if(resto==0)
    contatore++;
    }

    if(contatore<3)
    {

    if(i==numero)
    cout << i << endl;

    else
    cout << i << endl;
    }

    }

    return 0;
    }
  • ale98 ha scritto:


    for(int i=1;i<=227;i++)
    se vuoi i primi 50 è
    for(int i=2;i<=229;i++)
    oppure
    
    for(int i=2, p=0;p<50;i++)
    [...]
    if(contatore<3)
    {
        p++;
        cout << i << endl;
    }
    
Devi accedere o registrarti per scrivere nel forum
15 risposte