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.