Ho giusto un programmino in C della prima settimana
di corso del primo anno di ingegneria hi..hi(Poli di torino)
L'algoritmo riguarda la definizione di numaro primo:
"Un numero intero si dice primo se e solo se è divisibile
per 1 e per se stesso"
Quindi i numeri pari sono evidentemente non primi(tutti divisibili per 2).La ricerca viene fatta solo sui numeri dispari,quindi si
controlla che il numero inserito non abbia divisori a partire
da 2 fino a numero/2(gli altri numero/2 +1,.. danno tutti
resto diverso da zero quindi è inutile tenerne conto),
tenendo presente che dati a e b entrambi interi a è divisibile
perb se e solo se
il resto della divisione a/b è zero.
ESEMPIO
a=17; allora divido a per 2,3,...,a/2 nota:a/2=17/2=8
(divisione fra interi !)
e controllo che il resto delle divisioni sia
diverso da zero,se tutti i resti sono diversi da zero
allora a è divisibile soltanto per 1 e per se stesso
ovvero come da definizione "a è 1 numero primo"
17/2=8 resto 1
17/3=5 resto 2
17/4=4 resto 1
17/5=3 resto 2
17/6=2 resto 5
17/2=7 resto 3
17/8=2 resto 1
tutti i resti sono diversi da zero=>17 è 1 numero primo
NOTA:17/9=1 resto 8,....,17/16=1 resto 1 è sempre cosi'
per quello non ne teniamo conto e usiamo solo
i divisori fino ad a/2=17/2=8
POTENZA DEL POLI DI TORINO!!!!!!!!!!


#include <stdlib.h>
#include <stdio.h>
#include <limits.h>
#define NUM "c:\\numeri.txt"
#define MOD_R "r"
#define MOD_W "w"
#define MSG "non riesco ad aprire il file\n"
/*
Name: numeri_primi
Author:zax
Description:ho usato 1 file per memorizzare i divisori
poiche il loro numero nn è noto a priori
Date:
Copyright:
*/
typedef enum{fal,tru}boolean;
typedef FILE* file;
typedef char* string;/*ho definito il tipo stringa*/
void open_(string);
file fp;
int main(void)
{
boolean state=fal;
int i=0;
int state1,div,j;
unsigned int num;
char s1[80];
printf("Calcolo dei numeri primi\n");
printf("1 unsigned occupa %d byte,valore max %u\n",sizeof(unsigned int),UINT_MAX);
do
{

if(i&&(state))
{
printf("numero:");
state1=scanf("%*c%u",&num);/*il carattere viene soppresso*/
state=fal;
}
if((!state)&&(!i))
{
printf("Inserire un numero dispari:");
state1=scanf("%u",&num);
printf("\n");
}
if((num%2!=0)&&(num>0)&&(state1))
;/*ha letto correttamente*/
else
state=tru;

i++;
}while(state);/*esce con state==fal*/
div=num/2;

for(i=3,j=0;i<div;i++)
{
if(!(num%i))
{
printf("%d\n",i);
if(!j)
{
open_(MOD_W);
j++;
fprintf(fp,"NUMERO %u divisori\n",num);
}
fprintf(fp,"%d\n",i);/*scrivo su file i divisori*/
state=tru; /*ha divisori*/
}
}
if(state)
{
fclose(fp);
open_(MOD_R);
}

printf((state)?"%u numero non primo,seguono i divisori:\n":"%u numero primo\n",num);
i=0;
if(state)
{
fgets(s1,80,fp);
while(fscanf(fp,"%u",&num)!=EOF)
{
i++;
printf("%d)divisore=%u\n",i,num);
}

fclose(fp);
}
printf("%s\n",s1);

system("PAUSE");
return 0;
}

void open_(string s)
{
if((fp=fopen(NUM,s))==NULL)
{
printf(MSG);
system("pause");
exit(1);
}
}
Fai copia e incolla..