Zistenie K-teho prvočísla // C

Programovacie jazyky, rady, poradňa...
Birky22
Amateur
Amateur
Príspevky: 19
Registrovaný: 26 mar 2011, 13:48

Zistenie K-teho prvočísla // C

Príspevok od používateľa Birky22 »

Zdar, pokúšam sa napísať nejaký efektívny algoritmus na nájdenie Kteho prvočísla, kde K môže byť max 500 000. A chcel by som poradiť, že akým spôsobom by to bolo najrýchlejšie, ak použijem erastonové sito pomôže to? alebo v tomto prípade to ani nie?!
Zatiaľ mám len taký chaotický neefektívny algoritmus:

Kód: Vybrať všetko

// prvocisla.cpp : main project file.
#include<stdio.h>
int main()
{
    int N;
	scanf("%d",&N);

	int prvC[500000];
	prvC[0]=2;
	bool je=false;
	int pom;
if(N!=1)
{	
	for(int i=1;i<500000;i++)
	{
           // printf("ahoj");
		for(int j=prvC[i-1]+1;;(j%2==0)?j++:j+=2)
		{
               printf("%d\n",j);
			for(int k=0;k<i;k++)
			{
                    //printf("dovi");
				pom=j;
				if(j%prvC[k]==0){je=false;break;}
				else je=true;
			}
			if(je)break;

		}
		prvC[i]=pom;
		if(i+1==N){printf("%d",pom);break;}
	}
}else printf("2");	
	getchar();
	getchar();
    return 0;
}
Mal by som zefektívniť tento algoritmus alebo sa vybrať úplne iným smerom?!
harrison314
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 8223
Registrovaný: 27 máj 2009, 20:42
Bydlisko: Bratislava
Kontaktovať používateľa:

Re: Zistenie K-teho prvočísla // C

Príspevok od používateľa harrison314 »

Myslim ze nic rychlejsie ako Eurastenovo sito na tvoje "zadanie" nenapises.
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Zistenie K-teho prvočísla // C

Príspevok od používateľa audiotrack »

máš pravdu, ten kod je fakt chaoticky napísaný. Najprv ho napíš ako človek a nie ako opica čo náhodne trieska do klávesnice a potom sa môžeš začať snažiť odlaďovať a zefektívňovať
javatar
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6112
Registrovaný: 12 aug 2010, 14:49
Bydlisko: I don't exist at all.

Re: Zistenie K-teho prvočísla // C

Príspevok od používateľa javatar »

ono to sito by bolo fajn keby si ho zhora ohranicil prave tym 500 000-cim prvocislom... lenze to si rovno vytvor zoznam prvocisiel a mas to so zlozitostou O(1)

ja by som postupoval takto:
1. zoznam prvocisiel do 3 (teda 2,3), ten zoznam by si rozsiroval
2. cosi sa mi z prvaku na vyske mari ze kazde prvocislo vacsie ako 3 sa da zapisat ako 6n+1 alebo 6n-1 takze postupuj v mnozine prirodzenych cisel od cisla 5 sposobom +2+4
3. kazde cislo takto cekni na delitelnost - cekuj len delitelnost do velkosti druhej odmocniny a len prvocislami ktore mas v zozname (zbytok je zbytocne)
4. opakuj kym zoznam prvocisiel nebude mat velkost ktoru si zvolis - posledne cislo v zozname je k-te prvocislo

ak vidite priestor na optimalizaciu tak smelo do mna....
Napísať odpoveď