###### Força Bruta Function Sum35v1([Int32]$N) { [Int32]$S3 = 3 [Int32]$S5 = 5 [Int32]$S15 = 15 For ([int32]$i=2; $i -lt $N; $i++) { If ((3 * $i) -lt $N) { ## Múltiplos de 3 $S3 = $S3 + (3 * $i) } If ((5 * $i) -lt $N) { ## Múltiplos de 5 $S5 = $S5 + (5 * $i) } If (($N -gt 15) -And ((15 * $i) -lt $N)) { ## Múltiplos de 3 e 5 $S15 = $S15 + (15 * $i) } } ## Resultado é a soma dos ## múltiplos de 3 e 5 menos ## a soma dos múltiplos de 15 Return ($S3+$S5-$S15) } ##### Progressão Aritmética Function Sum35v2([Int32] $N){ ## A soma de todos os números de 1 a N ## pode ser calculado através da fórmula ## ( N * (N + 1) ) / 2 ## ## A soma dos múltiplos de 3 até N ## é calculada com 3*(1+2+3+4+...N/3) ## N/3=333, assim a soma de 1 até 333 ## é (333*(333+1))/2 ## logo a soma dos múltiplos de 3 é: [Int32]$S3 = 3*(333*334/2) ## A soma dos múltiplos de 5 até N ## é calculada analogamente [Int32]$S5 = 5*(199*200/2) ## A soma dos múltiplos de 15 até N ## é calculada analogamente [Int32]$S15 = 15*(66*67/2) Return ($S3+$S5-$S15) } Clear-Host $time = New-Object System.Diagnostics.Stopwatch $time.Start() Sum35v1(1000) $time.Stop() $ts = $time.Elapsed Write-Host "Tempo calculado com Força Bruta:" Write-Host $ts.Seconds "segundos e" $ts.Milliseconds "milisegundos" $time2 = New-Object System.Diagnostics.Stopwatch $time2.Start() Sum35v2(1000) $time2.Stop() $ts2 = $time2.Elapsed Write-Host "Tempo calculado com Progressão Aritmética:" Write-Host $ts2.Seconds "segundos e" $ts2.Milliseconds "milisegundos"
A soma dos múltiplos de 3 e 5 até 1000 é 233168.
Usando Força Bruta [Sum35v1], o tempo gasto foi:
233168 Tempo calculado com Força Bruta 0 segundos e 35 milisegundos
Usando Progressão Aritmética [Sum35v2], o tempo gasto foi:
233168 Tempo calculado com Progressão Aritmética 0 segundos e 10 milisegundos
Nenhum comentário:
Postar um comentário