Operação sobre um array de 2 na 28 posições rodar em 32 mb

Boa noite.

Estou com um trabalho da facul que não consigo ver uma solução…Tenho o trecho de código abaixo que precisa de 1gb para alocar mas tenho que fazer ele rodar em 32mb e no final retornar a quantidade de números divisíveis por 7 tem em todo o array.

Segue o trecho em pseudocódigo

  1. int i, num[2^28];
  2. num[0] = num[1] = 1; // inicialização
  3. i=2;
  4. while (i < (2^28 - 1)) do
  5. num[i] = num[i/2]; // i/2 é truncado
  6. num[i+1] = num[i/2] + num[i/2+1];
  7. i = i + 2;
  8. num[2^28 - 1] = 1; // último elemento

Percebi que, na verdade, preciso só de metade do array para gerar todos os valores mas, mesmo assim, ainda fica em 128 mb, se não me engano, que é 4 vezes maior do que o que posso utilizar.

Se alguém souber como resolver ou tiver alguma idéia que seja eu agradeço.

E não pode gravar direto no disco?

Por que essa restrição? Se for por causa da VM, não é só aumentar o limite de memória?

Bom dia,

Sobre desempenho e depois eu tenho que gerar um relatório. Não pode escrever e nem ler em nnenhum tipo de arquivo ou no disco. Por padrão a VM tem 64mb, segundo o que achei no google, mas não é questão da VM e sim do trabalho mesmo.
Na minha máquina, rodei o código do jeito que ta descrito no trabalho e levou 1h e 30 min pra chegar no final…isso que minha máquina tem um I7 e 8gb da RAM