9 8 7 6 5 4 3 2 1 8 7 6 5 4 3 2 1 7 6 5 4 3 2 1 6 5 4 3 2 1 5 4 3 2 1 4 3 2 1 3 2 1 2 1 1
n = int(input("Digite n: ")) j = n while j > 0: i = j while i > 0: print(i,end=" ") i -= 1 print() j -= 1
soma = 0 i = 1 while i <= n: j = 1 while j <= m: #numerador: num = i*i*j #denominador: den = (3**i)*(j*(3**i) + i*(3**j)) soma += num/den j += 1 i += 1 print("Soma:",soma)Uma solução alternativa pode ser obtida através da manipulação dos somatórios:
soma = 0 i = 1 while i <= n: somaj = 0 pi = 3**i j = 1 while j <= m: somaj += j/(j*pi + i*(3**j)) j += 1 soma += (i*i/pi)*somaj i += 1 print("Soma:",soma)
Solução:
n = int(input("Digite n: ")) print("Decomposição de",n,"em fatores primos:") fator = 2 while n > 1: mult = 0 while n % fator == 0: n = n // fator mult += 1 if mult > 0: print("fator",fator,"multiplicidade",mult) fator += 1
Dado um número inteiro m, m>0, determinar os ímpares consecutivos cuja soma é igual a n3, para n assumindo valores de 1 a m.
Solução 1:
m = int(input("Digite m: ")) n = 1 while n <= m: inic = 1 soma = 0 while soma != n*n*n: soma = 0 i = 1 while i <= n: soma += inic + (i-1)*2 i += 1 inic += 2 inic -= 2 print(n*n*n,"=",end=" ") print(inic, end=" ") i = 2 while i <= n: print("+",inic + (i-1)*2, end=" ") i += 1 print() n += 1
Solução 2:
Evita o laço mais interno, aplicando a fórmula
da soma dos termos da PA.
m = int(input("Digite m: ")) n = 1 while n <= m: inic = 1 soma = 0 while soma != n*n*n: soma = ((inic + inic+(n-1)*2)*n)//2 inic += 2 inic -= 2 print(n*n*n,"=",end=" ") print(inic, end=" ") i = 2 while i <= n: print("+",inic + (i-1)*2, end=" ") i += 1 print() n += 1
Solução 3:
Solução praticamente idêntica a anterior.
Apenas foram mudadas a ordem de alguns comandos e a
inicialização de inic
, de modo a evitar
o comando inic -= 2
após o laço mais interno.
m = int(input("Digite m: ")) n = 1 while n <= m: inic = -1 soma = 0 while soma != n*n*n: inic += 2 soma = ((inic + inic+(n-1)*2)*n)//2 print(n*n*n,"=",end=" ") print(inic, end=" ") i = 2 while i <= n: print("+",inic + (i-1)*2, end=" ") i += 1 print() n += 1
Solução 4:
Solução mais compacta,
aproveitando o fato de que o último termo
de uma sequência e o início da próxima
são ímpares consecutivos.
Por exemplo, observe que a sequência do 2 elevado ao cubo termina em 5,
enquanto que a sequência do 3 elevado ao cubo começa no 7 = 5+2.
m = int(input("Digite m: ")) n = 1 imp = 1 #primeiro dos ímpares de uma sequência que soma n^3 while n <= m: print(n*n*n,"=",end=" ") print(imp, end=" ") i = 2 while i <= n: imp += 2 print("+",imp, end=" ") i += 1 print() imp += 2 #início da próxima sequência n += 1
Vamos agora provar a validade da solução acima. Isto é, vamos demonstrar que, de fato, o último termo de uma sequência e o início da próxima são ímpares consecutivos.
Os n ímpares consecutivos formam uma progressão
aritmética (PA) de razão 2 (R=2
).
Logo, podemos usar a fórmula do termo geral da PA:
ai = a1 + (i-1)*R
.
Além disso, podemos aplicar a fórmula da soma dos termos da PA:
Combinando a fórmula da soma dos termos da PA com a fórmula do termo geral para o n-ésimo termo, temos:
Dado que sabemos que a1 é um número ímpar, podemos escrevê-lo na forma a1 = k*2+1, em que k é um número inteiro.
Portanto, temos que:
Isolando k, temos que:
Portanto, a1 pode ser calculado por:
(*)
Aplicando a fórmula do termo geral para o n-ésimo termo, temos então:
O início da próxima sequência pode então ser calculado, trocando-se n por n+1 na equação (*):
Ou seja, temos acima um valor igual a an + 2, como se queria demonstrar.
Solução 5:
Uma quinta solução pode ser obtida
calculando-se o início de cada sequência
diretamente através da equação (*) (isto é, a1 = n2 - n + 1) para cada valor de n.
A escrita do código Python desta quinta solução fica como exercício para o leitor.