Operadores Aritméticos de Atribuição +=,-=,*=,/=,%=

Cada um destes operadores é usado com um nome de variável à sua esquerda e uma expressão à sua direita.
Operador Exemplo É equivalente a:
*=x *= 5x = x * 5
/=x /= 5x = x / 5
%=x %= 5x = x % 5
+=x += 5x = x + 5
-=x -= 5x = x - 5

Operadores // e % (Divisão inteira e Resto)

Problema 1:

Dados números inteiros n, i e j, todos maiores do que zero, imprimir em ordem crescente os n primeiros naturais que são múltiplos de i ou de j e ou de ambos. Por exemplo, para n=6, i=2 e j=3 a saída deverá ser:
    0    2    3   4    6    8

Primeira solução: Testa os números 0, 1, 2, ... verificando e imprimindo quais são múltiplos de i ou j, até que n múltiplos sejam impressos.
  # dados de entrada
  print("Cálculo dos n primeiros múltiplos de i ou de j")
  n = int(input("Digite n: "))
  i = int(input("Digite i: "))
  j = int(input("Digite j: "))

  cont = 0 #conta quantos múltiplos foram impressos.
  cm = 0 #candidato a múltiplo.
  while cont < n:
      if cm%i == 0 or cm%j == 0:
          print(cm)
          cont += 1
      cm += 1
  
Segunda solução: Mais elaborada. Faz menos iterações que a anterior. A cada iteração imprime um múltiplo de i ou j.
  # dados de entrada
  print("Cálculo dos n primeiros múltiplos de i ou de j")
  n = int(input("Digite n: "))
  i = int(input("Digite i: "))
  j = int(input("Digite j: "))

  multi = 0 # múltiplos de i
  multj = 0 # múltiplos de j
  cont = 0 # conta quantos múltiplo foram impressos

  while cont < n:
      if multi < multj:
          print(multi)
          multi += i
      elif multj < multi:
          print(multj)
          multj += j
      else: # multi == multj
          print(multj)
          multi += i
          multj += j
      cont += 1
  

Problema 2:

Dado um número inteiro n, n>0, verificar se n é primo.

Um número natural é um número primo quando ele tem exatamente dois divisores naturais distintos: o número um e ele mesmo. Por definição, 0 e 1 não são números primos.

Primeira solução: Um número primo n não pode ser divisível por nenhum outro número no intervalo [2,n-1]. Logo, testamos todos candidatos a divisores possíveis no intervalo [2,n-1], e usamos um indicador de passagem (variável primo) para sinalizar a ocorrência desse evento (divisão). Ao final do programa vale que primo == False se e somente se o número dado não é primo.

  print("Teste de primalidade")
  n = int(input("Digite um inteiro: "))

  # o número é primo até que se prove o contrário
  primo = True #indicador de passagem
  d = 2 #os candidatos a divisores positivos de n
  while d < n:
      if n%d == 0:
          primo = False # não é primo!
      d += 1

  if n <= 1: #nenhum número natural <= 1 é primo.
      primo = False

  if primo:
      print("O número é primo")
  else:
      print("O número não é primo")
  

Segunda solução: Reduz o espaço de busca, testando apenas os candidatos a divisores positivos de n no intervalo 2,3,4,...,n/2.

  print("Teste de primalidade")
  n = int(input("Digite um inteiro: "))

  if n <= 1: #nenhum número natural <= 1 é primo.
      primo = False
  else:
      # o número é primo até que se prove o contrário.
      primo = True #indicador de passagem

  d = 2 #os candidatos a divisores positivos de n.
  while d <= n//2 and primo:
      if n%d == 0:
          primo = False # não é primo!
      d += 1

  if primo:
      print("O número é primo")
  else:
      print("O número não é primo")
  

Terceira solução: Reduz o espaço de busca ainda mais. Testa se o número é par fora do laço principal. Dentro do while só testa candidatos a divisores ímpares.

  print("Teste de primalidade")
  n = int(input("Digite um inteiro: "))

  if n <= 1: #nenhum número natural <= 1 é primo.
      primo = False
  elif n%2 == 0 and n > 2:
      primo = False #nenhum número par > 2 é primo.
  else:
      # o número é primo até que se prove o contrário
      # vale que n é um ímpar maior que 1 ou é 2.
      primo = True #indicador de passagem

  d = 3 #os candidatos a divisores positivos de n são 3,5,7,...,n/2
  while d <= n//2 and primo:
      if n%d == 0:
          primo = False # não é primo!
      d += 2

  if primo:
      print("O número é primo")
  else:
      print("O número não é primo")
  
Outras possíveis otimizações podem ser encontradas aqui.

Problema 3:

Dados dois inteiros positivos calcular o máximo divisor comum (MDC) entre eles usando o algoritmo de Euclides.

O MDC de dois números inteiros é o maior número inteiro que divide ambos sem deixar resto.

Exemplos:

Algoritmo de Euclides: Para dois números A e B:

  1. Se A ≥ B: MDC(A,B) = MDC(A-B, B) = MDC(A%B, B) = MDC(B, A%B)
  2. Se A < B: MDC(A,B) = MDC(B,A)
A repetição deste processo irá gerar sucessivamente números menores, até convergir em zero. Nesse momento, o MDC é o outro número inteiro, maior que zero.

  print("MDC entre A e B:")
  a = int(input("Entre com A: "))
  b = int(input("Entre com B: "))

  if a < b:
      a,b = b,a

  while b > 0:
      r = a%b
      a = b
      b = r

  print("MDC =",a)