Numero primos sem Array Collections Set ou algo do tipo

9 respostas
evertonsilvagomesjav

Galera meu professor da facul passou, pra verificar os primos entre 0 e 10, bah eu fiz com TreeSet e break Rotulado ficou assim:

import java.util.Set;
import java.util.TreeSet;


public class EvertonUtilsPrimos {

	
	public static void main(String[] args) {
		
				
		Set<Integer> lista = new TreeSet();
		
		lista.add(2);
		
		for(int i = 3; i <= 10; i++ ){
			
			int primo  = i;
			
			int aux = i-1;
						
		Rotulo:	
		while(aux > 1){
							
			if(primo % aux == 0 ){
													
				lista.remove(primo);
				
				break Rotulo;
			}
			
		
			lista.add(primo);
						
			aux--;
				
		}
				
				
		}
		
		
		for(int a : lista){
			
			System.out.println(a);
			
		}
			
			
	}
		
		
		
	}

Porém ele nao aceitou, falou que nao posso usar nada disso e falou um monte de besteiras pra mim. Tem como fazer sem usar nada disso? Eu to matutando aqui mas ta osso. Conseguir achar os que nao sao primos dessa forma:

public class EvertonUtilsPrimos {

	
	public static void main(String[] args) {
					
		
		for( int i = 1; i <= 10; i++ ){
			
			int primo  = i;
		
						
			int aux = i -1;
		
			
		while(aux > 1 ){
							
			if(primo % aux == 0 ){
					
				aux = 1;
				
				System.out.println("Nao e um numero Primo: " +primo);
				
			}
			
						
			aux--;
						
		}
				
				
		}
			
			
	}
		
		
		
	}

Com base nisso q eu fiz em cima sem usar nada da API igual eu fiz no primeiro exemplo da pra fazer?

9 Respostas

mario.fts

da pra fazer usando recursão.

evertonsilvagomesjav

Mario recursão ele nao vai deixar.

T

Usa um array de int e uma flag pra saber se ele saiu do while pelo break ou não.

public static void main(String[] args) {
        int lista[] = new int[10];
        int j=0;
        lista[j] = 2;
        for (int i = 3; i <= 10; i++) {
            boolean isPrimo=true;
            int aux = i - 1;
            Rotulo:
            while (aux > 1) {
                if (i % aux == 0) {
                    isPrimo = false;
                    break Rotulo;
                }
                aux--;
            }
            if (isPrimo) {
                j++;
                lista[j] = i;
            }
        }
        for (int a : lista) {
            System.out.println(a);
        }
    }

só vai precisar tratar certinho o tamanho do array.

fesaab

Cara, dá pra resolver de um jeito super simples, sem usar estrutura nenhuma:

for (int num=1; num<=10; num++){
    int metade = num / 2;
    boolean ehPrimo = true;
            
    //verifica se só é divisível por ele e por 1
    while (metade > 1 && ehPrimo){
        if (num % metade == 0)
            ehPrimo = false;
                
        metade--;
    }

    if (ehPrimo)
        System.out.println(num+" é primo.");
    else
        System.out.println(num+" não é primo.");
}

Repare que eu só verifico as divisões entre a faixa de números: [1…num/2] .
Faça o passo a passo do programa para você entender certinho.

Boa sorte e não acostuma não em… iauhaiuhaiuhaiuh

evertonsilvagomesjav
Tiago Borghi:
Usa um array de int e uma flag pra saber se ele saiu do while pelo break ou não.
public static void main(String[] args) {
        int lista[] = new int[10];
        int j=0;
        lista[j] = 2;
        for (int i = 3; i <= 10; i++) {
            boolean isPrimo=true;
            int aux = i - 1;
            Rotulo:
            while (aux > 1) {
                if (i % aux == 0) {
                    isPrimo = false;
                    break Rotulo;
                }
                aux--;
            }
            if (isPrimo) {
                j++;
                lista[j] = i;
            }
        }
        for (int a : lista) {
            System.out.println(a);
        }
    }

Cara o problema nao é resolver a questão se for resolver do meu jeito eu fazia rapidinho eu postei ai em cima do jeito que eu fiz com TreeSet e break, porém o cara nao deixa usar "String" nao deixa usar "Array" nao deixa usar nada, ele fala q nao ensinou isso e aquilo e nao aceitou meu exericio, daí to tentando fazer sem usar nada, porem eu conseguir mostrar os nao primos mais os primos ta osso =/

public static void main(String[] args) {
					
		
		for( int i = 1; i <= 10; i++ ){
			
			int primo  = i;
		
						
			int aux = i -1;
		
			
		while(aux > 1 ){
							
			if(primo % aux == 0 ){
					
				aux = 1;
				
				System.out.println("Nao e um numero Primo: " +primo);
				
			}
			
						
			aux--;
						
		}
				
				
		}
			
			
	}
T

Se for só pra dar Sysout não precisa adicionar na lista.
Onde estiver atribuindo à lista coloca o sysout :lol:

evertonsilvagomesjav

Tiago Borghi:
Se for só pra dar Sysout não precisa adicionar na lista.
Onde estiver atribuindo à lista coloca o sysout :lol:

ai ele vai exibir toda hora um numero igual concorda?

T

O que eu quis dizer é que ao invés de adicionar o elemento no array dos primos, você pode só escrever na tela.

public static void main(String[] args) {
        for (int i = 2; i <= 10; i++) {
            boolean isPrimo=true;
            int aux = i - 1;
            Rotulo:
            while (aux > 1) {
                if (i % aux == 0) {
                    isPrimo = false;
                    break Rotulo;
                }
                aux--;
            }
            if (isPrimo) {
                System.out.println(i+" é primo");
            }
        }
    }
fesaab

Cara, vc viu minha resposta?

aiuhaihaiha

Criado 23 de março de 2010
Ultima resposta 23 de mar. de 2010
Respostas 9
Participantes 4