Witam..uczę sie od roku programowania C++..sporo pewnie tutaj można uprościć...program oblicza liczby pierwsze wg mojej teorii..tzn nie spotkałem się nigdzie z takim podejsciem do problemu ale może się mylę. Potrzebna porada ..jak poradzić sobie z wiekszą ilością liczb i oczywiście dużo wiekszych..czy to możliwe ? Czy liczby zapisywać jako string? ..Program działa prawidłowo ale utknąłem na większych liczbach. Bardzo dziękuje za wszelkie sugestie..i wielkie ukłony dla Pana Mirka..
#include <iostream>
#include <iomanip>
#include <fstream>
#include <vector>
#include <string>
#include <time.h>
#include <conio.h>
#include <windows.h>
#include <stdio.h>
int tabR[95]={ 6,4,2,4,2,4,6,2,6,4,
2,4,2,4,6,2,6,4,2,4,
2,4,6,2,6,4,2,4,2,4,
6,2,6,4,2,4,2,4,6,2,
6,4,2,4,2,4,6,2,6,4,
2,4,2,4,6,2,6,4,2,4,
2,4,6,2,6,4,2,4,2,4,
6,2,6,4,2,4,2,4,6,2,
6,4,2,4,2,4,6,2,6,4,
2,4,2,4,6};
int64_t tabPr[90000000];
int64_t tabIl[90000000];
int64_t mod,j,y,kr,k;
int64_t f=1;
int suma_R;
int64_t i,ki,z=1;
int a, jn=360;
int64_t L;
int Lk;
int p;
int64_t x;
using namespace std;
int main()
{
cout << "Hello world!" << endl;
time_t czas;
struct tm * ptr;
time( & czas );
ptr = localtime( & czas );
char * data = asctime( ptr );
std::cout << "Data: " << data;
cout<<"wpisz dlugosc ciagu do 90 mln"<<endl;
cin>>L;
for(i=0; i<L; i++)
{
tabPr[i]=1+jn*i;
tabIl[i]=tabPr[i];
}
cout<<"obliczylem wartosci"<<endl;
for(k=0; k<L/jn; k++)
{
x=k*jn;
for(a=0; a<96; a++)
{
f=f+tabR[a];
for(j=x; j<f; j++)
{
mod=tabPr[j]%f;
if(mod==0)
{
for(j; j<L; j=j+f)
{
tabIl[j] =0;
}
}
}
}
}
cout<<"bede drukowal"<<endl;
fstream plik;
plik<<setprecision(1000000);
plik.open("liczby P.txt",ios::out|ios::app);
plik<<"..........................."<<endl;
plik<<data<<endl;
plik<<" liczby pierwsze "<<endl;
plik<<"............................................."<<endl;
for(y=0; y<L/7; y++)
{
if(tabIl[y]!=0)
{
plik<<z<<". "<<y*jn+1<<endl;
z++;
}
}
plik.close();
return 0;
}