EngSoft-UFMS / algoritmos_e_programacao_1

MIT License
0 stars 0 forks source link

Adicionar função calcular_total_impostos no exercicio "Salve a Lilly!" - 3002 (beecrowd) #9

Open WagnerRdeV opened 1 year ago

WagnerRdeV commented 1 year ago

função que calcula o total de impostos para Lilly.

LourdesOshiroIgarashi commented 1 year ago

Link do exercício: "Salve Lilly!" - 3002

LourdesOshiroIgarashi commented 1 year ago

Descrição do exercício "Salve Lilly!" - 3002:

Lilly vive em um país onde seu governo lhe cobra muitos impostos. Neste país, a regra é: se sua renda for N, terá que pagar o valor do maior divisor de N em impostos. Por exemplo, se N for 25, terá que pagar 5 de impostos, se for 2, terá que pagar 1.

Lilly é esperta, pois como diz o ditado, o mundo é dos espertos, e irá dividir sua renda em quantidades separadas, de forma que a soma de cada parte seja igual a N, e assim conseguir pagar menos impostos. Por exemplo, se ela tem 24 de renda e vai dividir em partes sendo elas, 20 e 4, terá que pagar o somatório do maior divisor de cada um, que neste caso é 10 + 2 = 12, o que não necessariamente é melhor divisão em partes possível.

Após uma longa maratona de programação, Lilly precisa pagar seus impostos neste mesmo dia, mas está sem tempo para calcular uma forma de minimizar o valor que terá que pagar, assim, pediu para você que criasse um programa que calcule este valor.

Partes de tamanho 1 não são possíveis, pois ficaria muito evidente para o governo que Lilly está trapaceando.

Entrada Contém um inteiro N (2 ≤ N ≤ 2*109).

Saída Um inteiro representando o total mínimo de impostos que Lilly irá pagar.

Exemplos de entrada: 4 Exemplos de saída: 2

LourdesOshiroIgarashi commented 1 year ago

Podemos implementar a função calcular_total_impostos da seguinte forma:

  1. Definimos a função calcular_imposto que recebe um número n como parâmetro.
  2. Dentro da função calcular_imposto, a primeira coisa que fazemos é calcular a raiz quadrada inteira de n. Isso é feito usando a função isqrt do módulo math.
  3. Em seguida, entramos em um laço de repetição enquanto o resto da divisão de n pelo maior_divisor for diferente de zero. Isso nos permite encontrar o maior divisor de n. A cada iteração, diminuímos o valor do maior_divisor em 1 até encontrarmos o maior divisor válido.
  4. Após encontrar o maior divisor de n, retornamos o resultado da divisão inteira de n pelo maior_divisor.