C:\FreeBASIC\fbc.exe -lang qb primi.bas pause
Naturalmente, questo prevede che il FreeBASIC sia stato installato nella directory C:\FreeBASIC. Se si trova altrove, modificare il batch di conseguenza.
Ecco il listato del file sorgente primi.bas :
Dim primi(2000) ' buffer per numeri primi Dim diff(2000) ' buffer per differenze Print " *********************************************************" Print " ** Programma per il calcolo dei numeri primi e delle **" Print " ** differenze tra un numero primo e il precedente. **" Print " ** Compilato con FreeBasic, opzione QB - E.Ficara 2011 **" Print " *********************************************************" primi(1) = 2 ' il primo numero primo (escludendo 1) diff(1) = 1 ' la prima differenza last = 2 ' indice iniziale dell'ultimo numero primo calcolato For i = 2 To 2000 ' limita la ricerca al numero 2000; modificare se serve For j = 1 To last - 1 ' prova divisibilita' con numeri precedenti If (i / primi(j)) = Int(i / primi(j)) Then Exit For ' esci se divisione intera Next j If j = last Then ' se non ha trovato divisori (e' un numero primo) ' NOTA: le prossime istruzioni servono per ESCLUDERE dalla lista dei numeri primi ' quelli che contengono cifre uguali (11 per esempio) m = 1110 ' inizializza valore migliaia (arbitrario) <> centinaia e decine c = 100 ' inizializza valore centinaia (arbitrario) d = 110 ' inizializza valore decine (arbitrario) <> centinaia u = i ' inizializza unita' con il numero in esame If u >= 1000 Then ' se maggiore o uguale a 1000 m = Int(u / 1000) ' m contiene le migliaia u = u - m * 1000 ' u contiene il resto (0-999) EndIf If u >= 100 Then ' se maggiore o uguale a 100 c = Int(u / 100) ' c contiene le centinaia u = u - c * 100 ' u contiene il resto (0-99) EndIf If u >= 10 Then ' se maggiore o uguale a 10 d = Int(u / 10) ' d contiene le decine u = u - d * 10 ' u contiene il resto (0-9) EndIf ' per mettere in lista tutti i numeri primi, sostituire la prossima linea ' con If (1) Then o eliminarla insieme al suo EndIf If m <> c And m <> d And m <> u And c <> d And c <> u And d <> u Then ' se m,c,d e u sono diversi primi(last) = i ' salva il numero in esame tra i primi diff(last) = i - primi(last - 1) ' calcola e salva la differenza col precedente last = last + 1 ' incrementa indice dell'ultimo numero calcolato EndIf EndIf Next i Open "primi.txt" For Output As #1 ' prepara file di uscita Print #1," 1", " 0" ' scrivi il primo numero primo :-) For i = 1 To last - 1 ' scrivi tabella numeri primi e differenze Print #1,primi(i), diff(i) Next i Print #1, ' interlinea ' scrivi tabella dei numeri primi che hanno differenza 10 col precedente For i = 1 To last - 1 If diff(i) = 10 then Print #1,primi(i), diff(i), primi(i - 1) EndIf Next i Close #1 Print "Programma terminato. E' stato creato il file primi.txt" Print "Premere un tasto qualsiasi per terminare..." Do if Inkey$ <> "" then Exit Do LoopIl programma genera un file di uscita chiamato primi.txt nel quale sono elencati i numeri primi (eccetto quelli che hanno cifre uguali, tipo l' 11 per intenderci) e, dopo questi, la lista dei numeri primi che hanno differenza 10 con il precedente (nel limite di 2000 posto come massimo per l'indagine).
Links utili