#include <stdio.h>

/* Protótipo da função J(n) do problema de Josephus */
int J(int n);  

/* Programa principal, que dado um inteiro n, 
   imprime J(m) para 1 <= m <= n. */  
main()
{
  int m, n;

  printf("Valor de n?\nn = ");
  scanf("%d", &n);
  printf("Os valores de J(m), para 1 <= m <= %d sao...:\n\n", n);

  for (m=1; m<=n; m++) 
    printf("J(%d) = %d\n", m, J(m));

  printf("\n");

  return 0;
}

int J(int n)
{
  int k=0, m;

  m=n;

  /* Aqui contamos o número de digitos binários de m=n. */
  while (m>0) {
    m=m>>1;
    k++;
  }

  /* Aqui obtemos todos os dígitos de n, menos o mais significativo. */
  n=n&~(1<<(k-1));
  
  return (n<<1)+1;
}
    
    
  
  
