Thread: Programozás
View Single Post
  #24  
Old 11-26-2010, 19:08
Csokibácsi Csokibácsi is offline
Member
 
Join Date: Jan 2006
Posts: 1,442
Activity: 0%
Longevity: 99%
Default Másik topikból beollózva :)

Quote:
Originally Posted by BimmBimm View Post
Az általam ismert legjobb módszer, ha csak a szám gyökéig keresed az osztóit.

PHP Code:
int isprime(unsigned int n)
{
    
unsigned int i;
    
unsigned int maxi=sqrt(n);


    for (
i=2;i<=maxi;i++)
    {
        if (
n%i==0) return 0;
    }
        return 
1;

(ez c kód)
Ez a sima osztogatós módszerhez képest majdnem ~250x-es gyorsulás (900000-ig kerestem a legnagyobb prímszámot).

Ennél még gyorsabb Eratosztenész szitálós módszere, 10 millás plafonnal ~30-35x gyorsabb mint a gyökös-osztós.
Igaz, durván zabálja a memóriát ha nagy számot keresünk, de ezzel akár lehet trükközni is
1 milliárdos limitnél 980MB RAM ugrik át foglaltba, viszont gyorsan megvan az eredmény, míg a gyökösnél a 100 millához 5 perc után már nem volt türelmem.

PHP Code:
int big_prime(int n)
{
    
int ijbigpr;
    
char tomb[n];
        
    for (
0ni++) tomb[i] = 1;
    
    for(
2ni++) {
        if (
tomb[i] == 1) {
            for(
2n+= itomb[j] = 0;
        }
    }
    
    for(
1ni++)
        if(
tomb[i] == 1bigpr i;

    return 
bigpr;
//tomb tartalmazza az osszes n-nel kisebb primet, nekem csak a legnagyobb kellett
//lehet jatszani unsigned long long valtozokkal is ...

(eziscébenvan)

A legjobb az AKS algoritmus, de azt próbálja ki más

A legnagyobb ismert prím pedig a 2^43112609 − 1
__________________
Sorry, this account has been suspended
Reply With Quote