Déterminer les Nombres premiers en utilisant un SEUL-lors de la Boucle

J'ai écrit ce programme de par mon professeur de l'enseignement. Il s'avère qu'il voulait que nous n'utiliser qu'un SEUL-lors de la boucle. Alors que je n'ai techniquement faire... ce ne sera pas volée. Je ne peux pas comprendre comment le faire sans l'aide d'une boucle for ou au moins une autre boucle d'un autre type. Il a dit qu'il pourrait utiliser continue ou break états--mais qu'il pourrait ne pas être nécessaire.

Je vous serais reconnaissant de ne pas ré-écrire mon code--bien que ce soit pratique, je n'ai pas apprendre de bien.

J'apprécie toute aide.

int main() {

int max, x, n = 2; //init variables
//start n at 2 because 1 isn't prime ever

//asks user for max value
printf("Enter max number: ");
scanf("%i", &max);

/*prints prime numbers while the max value
is greater than the number being checked*/
do {
    x = 0; //using x as a flag
    for (int i = 2; i <= (n / 2); i++) {
        if ((n % i) == 0) {
            x = 1;
            break;
        }
    }
    if (x == 0) //if n is prime, print it!
        printf("%i\n", n);
    n++; //increase number to check for prime-ness
} while (n < max);

return 0;
}
  • Je ne vois pas comment cela peut être fait facilement avec une seule boucle. Cela impliquerait un algorithme O(1) pour la détermination de primalité. Pas une telle méthode est connue.
  • Êtes-vous autorisé à utiliser si les déclarations?
  • Je suppose que oui. Il n'a pas dit qu'on ne pouvait pas.
  • Êtes-vous sûr que le programme doit imprimer tous les nombres premiers en dessous d'une certaine limite? Peut-être l'entrée est censé être un numéro unique qui est ensuite testé? Cela pourrait être fait facilement avec une seule boucle. Mais pas l'ancien!
  • Je suis certain que c'est ce qu'il demande. Mon professeur est un peu ridicule quand il s'agit à notre connaissance de la C.-je trouver cette classe, plutôt facile -, mais ses trucs de ce genre qui me laisse de me gratter la tête.
InformationsquelleAutor Nxt3 | 2014-03-05