A ver, no es un problema de C, es de aritmetica.
La condición que impones la cumplen todos, no solo los primos. (Todos los numeros son divisibles por 1 y por si mismos).
El matiz es: Solo los numeros primos tienen unicamente como divisores a 1 y a si mismos...
Repasa el libro de mates. Hay muchas maneras de computar si un numero es primo: Yo pongo una de las más sencillas:
"Si un número mayor que 1 no tiene divisores otros que el 1 antes hasta la mitad, entonces es primo. En otro caso, o si es 1 o 0 no es primo "
Va una posible solucion
Esto es el fichero datos.txt
Y esto la salida por pantalla
La condición que impones la cumplen todos, no solo los primos. (Todos los numeros son divisibles por 1 y por si mismos).
El matiz es: Solo los numeros primos tienen unicamente como divisores a 1 y a si mismos...
Repasa el libro de mates. Hay muchas maneras de computar si un numero es primo: Yo pongo una de las más sencillas:
"Si un número mayor que 1 no tiene divisores otros que el 1 antes hasta la mitad, entonces es primo. En otro caso, o si es 1 o 0 no es primo "
Va una posible solucion
Código (c) [Seleccionar]
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
// P : n >= 0
// Q : p = n > 1 and \not (\exits i : 2<= i , 2 <= 2i <= n : n%i = 0)
// O(n)
int prime(const int n)
{
int d;
for(d=2 ; (2*d<=n) && (n%d); d++);
return (n>1)*(2*d > n) ;
}
int main (void){
FILE *f;
int n;
if (!(f = fopen("datos.txt","r")))
{
perror("fopen");
exit(EXIT_FAILURE);
};
while(!feof(f)){
fscanf(f, "%d\n", &n);
if (prime(n)) printf("%d\n", n);
}
fclose(f);
}
Esto es el fichero datos.txt
Código [Seleccionar]
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Y esto la salida por pantalla
Código [Seleccionar]
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47