Qui di seguito sono presenti alcuni algoritmi per la generazione di numeri primi minori o uguali ad un numero
assegnato N.
Indice
1 Java
2 C/C++
2.1 Pascal
2.2 Crivello di Eratostene
3 C#
Java
Questo metodo scritto in linguaggio Java consente la stampa in output tutti i numeri primi inferiori al parametro
"limitazione".
Si basa su un ciclo che scorre tutti i numeri inferiori al parametro e valuta tramite un secondo metodo di nome
"primo" se ogni singolo numero è primo o meno.
…wikipedia.org/…/Algoritmi_per_la_g… 1/9
19/01/2011 Algoritmi per la generazione dei nume…
public void stampaNumeriPrimi (int max) {
/**
* Restituisce {@code true} se il numero specificato è primo,
* {@code false} altrimenti.
*/
protected boolean primo(int numero){
C/C++
Di seguito un algoritmo per la stampa dei numeri primi consecutivi. Si basa sul controllo di ogni singolo numero
dispari maggiore di 2 finché non viene raggiunto un limite prestabilito da voi.
…wikipedia.org/…/Algoritmi_per_la_g… 2/9
19/01/2011 Algoritmi per la generazione dei nume…
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main();
bool Prime(unsigned int * n);
int main () {
unsigned int l;
do {
scanf("%d", &l);
} while (l <= 2); // Chiede un numero finché non viene inserito un valore magg
printf("\n\n-\n\n");
system("PAUSE");
return 0;
}
…wikipedia.org/…/Algoritmi_per_la_g… 3/9
19/01/2011 Algoritmi per la generazione dei nume…
#include <iostream>
#include <cmath>
using namespace std;
dp[0]=5;
m[0]=25;
if (max >=2){
cout<<2<<endl;
}
if (max >=3){
cout<<3<<endl;
}
if (max >=5){
cout<<5<<endl;
}
delete dp;
delete m;
}
int main(void)
{
int i;
Una versione semplice e veloce che permette la ricerca dei primi N (numero inserito dall'utente) numeri primi
…wikipedia.org/…/Algoritmi_per_la_g… 4/9
19/01/2011 Algoritmi per la generazione dei nume…
#include <iostream>
using namespace std;
int main()
{
int N, riemp = 1, i = 3;
cout << "\nI primi " << N << " numeri primi sono:\n2\n";
do
{
if (verifica_Primo(i))
{
cout << i << endl;
riemp++;
}
system ("pause");
return 0;
}
Con la stessa logica un altro algoritmo per la generazione di numeri primi, questa volta inferiori ad un numero N
inserito dall'utente
…wikipedia.org/…/Algoritmi_per_la_g… 5/9
19/01/2011 Algoritmi per la generazione dei nume…
#include <iostream>
using namespace std;
int main()
{
int N, i = 3;
cout << "\nI numeri primi minori di " << N << " sono:\n2\n";
while (i <= N)
{
if (verifica_Primo(i))
cout << i << endl;
};
system ("pause");
return 0;
}
Pascal
…wikipedia.org/…/Algoritmi_per_la_g… 6/9
19/01/2011 Algoritmi per la generazione dei nume…
program numeri_primi;
uses crt;
var
a,b:longint;
c:real;
begin
clrscr;
write('Dammi il numero da verificare : '); readln(a);
b:=a;
c:=1 + sqrt(a);
a:=round(c);
if a=1 then writeln('1 non è primo')
else if a=2 then writeln('2 è primo!')
else if a=0 then writeln('Con tanti numeri che ci sono proprio 0 dovevi s
else
begin
repeat
begin
a:= a -1;
end;
until (a=2) or (b mod a = 0);
if b mod a = 0 then
begin
a:=b;
writeln(b,' non è primo!');
writeln('I suoi divisori sono: ');
for a:= b-1 downto 2 do
if b mod a = 0 then write(' ',a,' ');
writeln(' ');
end
else if a=2 then writeln(b,' è primo!')
else writeln('ERRORE!');
end
end.
Crivello di Eratostene
Un numero intero N non può avere tutti i divisori maggiori della sua radice quadrata. Per verificare se un numero
è primo basta quindi dividerlo per gli interi e calcolare il resto. Se il resto è sempre diverso da
zero, allora il numero è primo. Per evitare estrazioni di radice allarghiamo la ricerca tra 2 e N/2 in quanto per N
>= 2, vale .
…wikipedia.org/…/Algoritmi_per_la_g… 7/9
19/01/2011 Algoritmi per la generazione dei nume…
#include <stdio.h>
#include <stdlib.h>
FILE *pfile;
/*prototipi funzioni*/
void creafile(void);
void crivello_eratostene(long int pvett[], long int *pn);
int main()
{
long int N, *pvett;
exit(EXIT_SUCCESS);
return 0;
}
/*funzione che crea il file dove salvare i numeri primi*/
void creafile(void)
{
char nomefile[20];
return;
}
/*funzione che calcola i numeri primi*/
void crivello_eratostene(long int pvett[], long int *pn)
{
long int i, j;
C#
Questo metodo scritto in linguaggio C# consente la stampa in output tutti i numeri primi inferiori al parametro
"limite".
…wikipedia.org/…/Algoritmi_per_la_g… 8/9
19/01/2011 Algoritmi per la generazione dei nume…
Si basa su un ciclo che scorre tutti i numeri inferiori al parametro e valuta tramite un secondo metodo di nome
"primo" se ogni singolo numero è primo o meno.
using System;
namespace Numeri_Primi
{
class Program
{
static void Main(string[] args)
{
int limite;
Console.WriteLine("Scrivi Limite:");
limite = Convert.ToInt32(Console.ReadLine());
if (limite > 1)
{
int pos = 2;
while (pos <= limite)
{
if (primo(pos)) Console.WriteLine(pos);
pos++;
}
}
Console.Read();
}
…wikipedia.org/…/Algoritmi_per_la_g… 9/9