Como faço para dividir um numero e aparecer so o menor divisor exeto o 0?

aki vai o codigo q até agora fiz:
package divisores;

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
         Scanner entrada = new Scanner (System.in);
   int num,i;
    System.out.print("Número: ");
    num = entrada.nextInt();
    System.out.print("Divisores de " + num + ": ");
    for (i = 2; i <= num; i++)
          if (num % i == 0)
            System.out.print(i + ",");
}

}
ele aparece todos os divisores ,mas eu so qero o menor exemplo se num for 15 eu qero q apareça o 3 como menor divisor!

Pegue o seu programa, e pare o loop (for) quando achar o primeiro divisor, que será o menor divisor. Use “break” para sair do loop.

valeu!!!

[code]import java.util.Scanner;

public class Teste2 {

public static void main(String[] args) {
	Scanner entrada = new Scanner(System.in);
	int num, i;
	System.out.print("Número: ");
	num = entrada.nextInt();
	System.out.print("MENOR DIVISOR " + num + ": ");
	for (i = 2; i <= num; i++) {
		if (num % i == 0) {
			System.out.print(i);
			break;
		}
	}
}

}[/code]

Faz como o Tiburcio_Mancha exemplificou.

Como vc quer o menor, não precisa ler os demais então.

Adiciona um break no if e já era.

Na verdade você quer o menor divisor diferente de 1. Pois todo os números são divisíveis por 1.

Na verdade, para um número N, o maior divisor diferente de 1 e do próprio N, deverá estar no intervalo entre 2…N/2. Isso porque se o número for dividido por um divisor entre N/2+1 e N-1 será sempre um número menor do que 2 e maior do que 1, portanto, sempre um número quebrado.

Além disso, se o número for par, o menor divisor será obrigatoriamente o próprio 2. Portanto, se não for par, basta testarmos apenas os divisores ímpares.

[code]public int menorDivisor(int n) {
//Testa se n é divisível por 2.
//Se não for, n também não será divisível por
//nenhum número par.
if (n % 2 == 0)
return 2;

//Isso nos permite testar de 2 em 2
for (int i = 3; i <= n/2; i+=2) {
if (n % i == 0) {
return i;
}
}

//Se não encontrou nenhum divisor até n/2, então é o próprio n.
return n;
}
[/code]

Melhor que isso, só se tivessemos uma lista de todos os primos inferiores a N/2. E só dividíssemos N por esses primos.

Se o número for par, o menor divisor é 2.

Se o número não for par, eu começaria a testar no 3 e incrementaria o contador de 2 em 2.

Com isso, testaria só os ímpares e reduziria e número de iterações pela metade.

Vale também pesquisar se existe algum algoritmo mais eficiente para isso.

(Isso tudo se você estiver interessado em performance, se for só um exercício, deixa pra lá.)

Bom…

Se o Vini falou, tá falado. :slight_smile:

[quote=pablosaraiva]Se o número for par, o menor divisor é 2.

Se o número não for par, eu começaria a testar no 3 e incrementaria o contador de 2 em 2.

Com isso, testaria só os ímpares e reduziria e número de iterações pela metade.

Vale também pesquisar se existe algum algoritmo mais eficiente para isso.

(Isso tudo se você estiver interessado em performance, se for só um exercício, deixa pra lá.)[/quote]

hahaha, vc postou 3 segundos depois do que eu.

hahahaha Eu vi.

:smiley:

Só para saber…
Qual a diferença de

for (int i = 3; i <= n/2; i+=2) {  

e

for (int i = 3; i <= n/2; i=i+2) {  

[quote=pedroroxd]Só para saber…
Qual a diferença de

for (int i = 3; i <= n/2; i+=2) {  

e

for (int i = 3; i <= n/2; i=i+2) {  

nenhuma. o resultado é o mesmo.

Ah…
Vlws

[quote=mario.fts][quote=pedroroxd]Só para saber…
Qual a diferença de

for (int i = 3; i <= n/2; i+=2) {  

e

for (int i = 3; i <= n/2; i=i+2) {  

nenhuma. o resultado é o mesmo.[/quote]

O resultado é o mesmo mas ha uma diferença sim

i++ é uma operação só, unica.
i= i + 1 são 2 operações , a soma e a atribuição.

i+=1 é apenas um atalho para i = i + 1

Ou seja, os comandos que a JVM invoca são diferentes embora o resutlado seja o mesmo

[quote=pedroroxd]
Nem entre isso? (Sendo jcombo um JComboBox)

String a =String.valueOf(jcombo.getSelectedItem()); String b = jcombo.getSelectedItem().toString(); String c = (String) jcombo.getSelectedItem();[/quote]

Opa! Peraí!

O método getSelectedItem do JComboBox retorna um Object.

Se você fizer a chamada da forma a ou b, não deve dar erro, pois será invocado o método toString() do objeto.

Agora, no caso c, você vai ter uma runtime exception caso o objeto não seja string. O typecasting deve ser evitado sempre que possível.

String c = (String) jcombo.getSelectedItem();

Opa…
Valew ae…
Tava impaciente, e antes de vc responder eu criei 1 tópico

Vou responder lá também então. :slight_smile:

A vontade =)

Entre 2 e N/2 ou entre 2 e raiz quadrada de N (inclusive)?