Kicsit mit szólnátok ha fejlesztenénk rajta? Aki futtatta egy kis idejig az biztos észre vette hogy a vizsgálás 1 és 200000 között viszonylag gyors és ez után kezd szép lassan belassulni. Sejtitek-e hogy miért van ez? Namost az osztok() az egy külső függvény aminek visszatérési értéke nem más mint az hogy a vizsgált szám hány darab osztóval rendelkezik... és ha ezek szám 2 akkor hívjuk őtet prímnek :) Ha több akkor pedig nem :) A program belassulásának legfőbb oka hogy legyen az adott számunk az 500000, ekkor a második ciklus ami ennek az osztóit vizsgálja kénytelen 1...500000-ig elbattyogni akár megvan már a 2 osztó akár már több van. Innen jött az ötlet hogy egészítsem ki egy olyan feltétellel hogy amennyiben megvan már 3 osztó ne vizsgálja tovább az adott számot hanem menjen a következőre.
primkeresoupgrade.c
#include <stdio.h>
#include <stdlib.h>
int osztokszama;
int osztok(int j)
{
int i,osztok=0;
for(i=1;i<=j;i++)
{
if(osztok==3) break;
if((j%i)==0) osztok++;
}
printf("A %d nek ennyi osztoja van: %d ",j,osztok);
osztokszama=osztok;
return osztokszama;
}
int
main ()
{
int j;
for(j=5000000;;++j)
{
osztok(j);
if (osztokszama==2) printf(" PRÍMSZÁM!!!\n");
else printf("\n");
}
return 0;
}
Ezzel a kis módosítással rengeteg időt spórolunk meg, de elég egy állatorvosi lovas példára gondolni, ha van egy program aminek a futási ideje 6 sec és ezt a programot 1000000 szor használják, akkor csak 1 sec-es gyorsítással 1000000 másodpercet tudunk megspórolni, ami 16666 perc, 277 óra és ez 11,57 nap. :)