Holas
Aquí dejo un código, más que nada curioso, que va guardando números primos en un archivo.
Información:- Tras cerrar el programa, retoma el último primo que generó
- Funcionalidad para medir el tiempo que tarda (véase que con números altos empieza a tardar mucho más)
- Se usa sólo la librería estándar
#include <iostream>
#include <fstream>
#include <ctime>
#include <cmath>
using namespace std;
inline bool primo(uint64_t n){
if(n%2==0) return false;
uint64_t i=3;
uint64_t sq = sqrt(n);
for (;n%i!=0; i+=2){
if(i>sq){
i=n;
break;
}
}
return i==n;
}
int main () {
while(true){
uint64_t u=2, g=0, h=0;
string t;
cout << "Numero de primos a conseguir (0 para ver ultimo primo): ";
getline(cin,t);
g = strtoull(t.c_str(),NULL,0);
ifstream leer("primos.txt", ios::ate);
char n='0';
if(leer){
while(n!='\n'){
leer.unget();
n = leer.get();
leer.unget();
}
leer.get();
leer >> u;
}
leer.close();
if(g==0){
cout << "Ultimo primo conseguido: " << u << endl << endl;
continue;
}
ofstream escribir("primos.txt", ios::app);
if(u==2){
escribir << u--;
}
clock_t timer = clock();
while(h<g){
u+=2;
if(primo(u)){
escribir << endl << u;
++h;
}
}
cout << endl << "Conseguidos " << h << " primos en " << ((clock()-timer)*1000)/CLOCKS_PER_SEC << " milisegundos." << endl << endl;
}
}
El código creo yo que es fácil de entender. Se usa
fstream para manejar el archivo de primos.
Quien le quiera mejorar el algoritmo para detectar los primos, está en su derecho, por supuesto.
Quien quiera guardar los primos en binario (8 bytes para uint64_t), puede hacer fácilmente la modificación.
Y hasta quien quiera, que le ponga una barra de carga jaja
Bueno, espero que a alguien le ayude.
Byes :3