Olá!
É minha primeira vez aqui, então me desculpem qualquer coisa :v
Estou aprendendo Java, e passei a última semana quebrando a cabeça para resolver um problema de números primos. Resolvi, e consegui um programa extremamente rápido, que era a grande dificuldade. Ele lê um número e escreve todos os primos existentes de 2 até o número, sendo o funcionamento interno acontecendo com um vetor de tamanho n + 1. O problema é que, pelo que parece, há um limite no número de posições que o vetor pode ter. Há como aumentar o tamanho máximo de um vetor? Quando dou a entrada 679000000 em diante, o seguinte erro é retornado, logo de início:
Exception in thread “main” java.lang.OutOfMemoryError: Java heap space
Na verdade, não preciso. Já consigo chegar a valores bem grandes com esse código mas, quando vi que tinha um limite, fiquei bem curioso à respeito. Talvez, se alterar a JVM não ajude muito com o tamanho, eu possa tentar usar matrizes para conseguir rodar o código com números maiores.
O algoritmo é o seguinte:
import java.util.Scanner;
public class primos_novo {
public static void main (String [] args) {
Scanner sc = new Scanner (System.in);
int n = sc.nextInt ();
boolean crivo [] = new boolean [n];
int posicao_relativa = 0;
int j = 0;
for (int i = 0; i < n; i++){
crivo [i] = true;
}
for (int i = 2; i < n; i++){
if (crivo [i] == true){
System.out.println(i);
j = 2;
while (j < n){
posicao_relativa = i * j;
if (posicao_relativa < n){
crivo [posicao_relativa] = false;
}else{
break;
}
j++;
}
}
}
}
}