Il programma che riporto in calce include la libreria math.h e si compila senza troppi problemi in Dev-cpp mentre portato su Linux e compilato con
gcc -Wall -o num_primi num_primi.c
riporta che la funzione sqrt non ha riferimenti
se invece si compila come
g++ -Wall -o num_primi num_primi.c
curioso no???
la soluzione e' che C++ non ha necessita' di includere la funzione radice quadrata come libreria esterna mentre C si' per cui la giusta stringa di compilazione e'
gcc -Wall -lm -o num_primi num_primi.c
Geany |
Configurazione di compilazione di Geany |
-----------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX 100000
int indice;
int t,s;
int matrice[MAX];
int calcola(int numero)
{
int i,c;
c = 0;
for (i=1;i<=indice;i++)
{
if (((numero%matrice[i]) == 0) || (sqrt(matrice[i]) >
numero)) //se il modulo e' zero e' un divisore allora esce subito
{
c = 1;
break;
}
}
if (c==0)
{
printf("%i\n\r",numero);
return 1;
}
else
return 0;
}
int main(int argc, char *argv[])
{
matrice[0] = 1;
matrice[1] = 2;
indice = 1;
for (t=3;t<=MAX;t++)
{
if (t%2!=0) // calcola solo se e' un numero dispari
{
s = calcola(t); //calcola se e' primo
if (s==1) //se e' primo inseriscilo nella matrice
{
indice++;
matrice[indice] = t;
}
}
}
return 0;
}