Witam, próbuję rozwiązać takie zadanie: http://www.main.edu.pl/user.phtml?op=showtask&task=cie&con=ALG
Zgodnie z tym co było w kursie powinienem wykorzystać technikę preprocessingu, czyli znaleźć wszystkie 'ciekawe liczby' i umieścić w gotowych programie (zapewne nie jest ich dużo). Mój problem pojawia się w ich znalezieniu, ponieważ zakres sięga aż do 100 000 000. Program do wyszukiwania, który napisałem liczyłby to jakieś 28h na moim PC. Jak mogę go zoptymalizować?
#include <cstdio>
#include <fstream>
using std::ofstream;
int dziel, // ile dzielników
suma; // suma liczb pierwszych
void pierwsze(int x, int temp = 2)
{
for(int i = 2; i <= x/2; i++)
{
if(temp > 2) break;
if(x % i == 0) temp++;
}
if(temp == 2)
suma += x;
}
void dzielniki(int x)
{
dziel = 2;
for(int i = 2; i <= x/2; i++)
if(x % i == 0)
{
dziel++;
pierwsze(i); // sprawdzenie czy nie jest liczbą pierwszą
}
}
int main()
{
ofstream log;
log.open("log.txt");
int x; // liczba od której zacznie się poszukiwanie
scanf("%d", &x);
for(int i = x; i < 100000001; i++)
{
dzielniki(i);
printf("%d\n", i);
if(dziel % 13 == 0 && dziel/13 == suma) // warunek 'ciekawej liczby'
{
printf("%d\n", i);
log << i << "\n"; // zapisanie znalezionej liczby do pliku
}
suma = 0;
}
log.close();
return 0;
}