Avatar billede casualty Nybegynder
22. marts 2004 - 21:29 Der er 6 kommentarer og
1 løsning

Hjælp til optimering (performance) af primtalsberegningsmetode

Jeg føler nogle gange at jeg sidder og laver dobbeltkonfekt :)
Er der nogen der kan fortælle mig om og i så fald hvordan denne metode kan optimeres...

metoden fortæller hvorvidt et tal(BigInteger) er et primtal eller ej....:

public boolean isPrime(BigInteger num){
    if(!num.isProbablePrime(Integer.MAX_VALUE)){
      return false;
    }
    for(BigInteger enum = new BigInteger("2");
    enum.compareTo(num.divide(new BigInteger("2")))<=0;
    enum = enum.add(new BigInteger("1"))){
      if(num.mod(enum).equals(new BigInteger("0"))){
        return false;
      }
    }
    return true;
  }

Mvh Casualty
Avatar billede arne_v Ekspert
22. marts 2004 - 21:32 #1
Du behøver ikke køre op til num/2 - det er nok at køre op til sqrt(num)
Avatar billede arne_v Ekspert
22. marts 2004 - 21:35 #2
Du kan teste for mod 2 og så bruge +2 i tælleren (3,5,7,...)
Avatar billede casualty Nybegynder
22. marts 2004 - 21:55 #3
Hvordan bruger jeg sqrt() med BigInteger?
Avatar billede arne_v Ekspert
22. marts 2004 - 21:57 #4
Enten skal du selv finde ud af noget snedigt.

Eller så skal du bare bruge at:

a < sqrt(b)

og

a*a < b

gør det samme !
Avatar billede rasmusbg Nybegynder
23. marts 2004 - 03:12 #5
Du behøver kun undersøge, om num er divisibel med de primtal, der er op til sqrt(num). Disse primtal kan du beregne vha. algoritmen "Erathostenes si". :o)
Avatar billede casualty Nybegynder
24. marts 2004 - 11:47 #6
Tak arne... Læg et svar...
Avatar billede arne_v Ekspert
24. marts 2004 - 12:08 #7
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester