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 https://www.diskusjon.no/topic/926952-c-program-til-%C3%A5-faktorisere/page/2/#findComment-10962832
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 https://www.diskusjon.no/topic/926952-c-program-til-%C3%A5-faktorisere/page/2/#findComment-10963390
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 https://www.diskusjon.no/topic/926952-c-program-til-%C3%A5-faktorisere/page/2/#findComment-10963656
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 https://www.diskusjon.no/topic/926952-c-program-til-%C3%A5-faktorisere/page/2/#findComment-10965690
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å