Velena Skrevet 15. april 2008 Forfatter Del Skrevet 15. april 2008 (endret) Ser ikke helt hva du vil jeg skal gjøre Geirgrusom. Du ba meg unngå å bruke divisjon/modulus, og det gjorde jeg. Hvis du har et forslag til en annen måte å gjøre det på, så for all del, vis meg det. Koden uten double.parse: double primeCheck = 0; Bool noPrime = false; Int []thePrimeNums; double halfi; double halfi2; double i; for ( i=1; i<10000;i++) { halfi=Math.Floor(i*0.5); halfi2=i*0.5; if (i!=2 && halfi2-halfi==0) { noPrime=true; } else { For (primeCheck = Math.Floor(i*0.5) ; primeCheck>0; primeCheck-2) { If((i%primeCheck)==0) { if (primeCheck == 1) {} else { noPrime = true; break; } } } } If (noPrime==true) {} Else { thePrimeNums+=i + “, ”; noPrime=false; } } Endret 15. april 2008 av Velena Lenke til kommentar
steingrim Skrevet 15. april 2008 Del Skrevet 15. april 2008 Har du gjort noen målinger for å se hvor mye raskere koden har blitt? Det kunne jo vært artig Lenke til kommentar
GeirGrusom Skrevet 15. april 2008 Del Skrevet 15. april 2008 (endret) Ser ikke helt hva du vil jeg skal gjøre Geirgrusom. Du ba meg unngå å bruke divisjon/modulus, og det gjorde jeg.Hvis du har et forslag til en annen måte å gjøre det på, så for all del, vis meg det. Koden uten double.parse: Jeg mener ikke å fornærme deg eller noe, men her er mitt forslag: private static long[] CalculatePrimes() { // Partall er uansett ikke primtall, de kan deles på 2 List<long> result = new List<long>(); for (long i = 1; i < 5e4; i += 2) { long check_count = i / 2; bool is_prime = true; // Start fra halvparten for (long j = 3; j <= check_count; j+=2) // Sjekk om dette er primtall if (i % j == 0) { is_prime = false; break; } if (is_prime) result.Add(i); } return result.ToArray(); } edit: oppdaterte koden litt; er ikke nødvendig å sjekke partall i innerste løkken heller. Endret 16. april 2008 av GeirGrusom Lenke til kommentar
hockey500 Skrevet 15. april 2008 Del Skrevet 15. april 2008 (endret) mens vi er inne på presentasjon av forslag: Klikk for å se/fjerne innholdet nedenfor static long[] GetFactors(long n) { List<long> factors = new List<long>(); long MAX = (long) Math.Ceiling(Math.Sqrt(n)); bool FactorAddedInLoop = false; if ((n % 2) == 0) { factors.Add(2); n /= 2; } for (long x = 3; x <= MAX;) { FactorAddedInLoop = false; if ((n % x) == 0) { factors.Add(x); n /= x; if ((n % 2) == 0) { factors.Add(2); n /= 2; } x = 3; FactorAddedInLoop = true; } else x += 2; } if (!FactorAddedInLoop && n != 1) factors.Add(n); return factors.ToArray(); returnerer et array med alle faktorene. funker fint opp til 15-sifrede tall hvertfall. Endret 15. april 2008 av hockey500 Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå