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

20 respostas
A

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!

20 Respostas

E

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.

A

valeu!!!

Tiburcio_Mancha
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;
			}
		}
	}

}
romarcio

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.

rmendes08

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

ViniGodoy

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.

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;
}

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

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á.)

pablosaraiva

Bom…

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

ViniGodoy

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á.)

hahaha, vc postou 3 segundos depois do que eu.

pablosaraiva

hahahaha Eu vi.

:smiley:

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) {
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.

pedroroxd

Ah…
Vlws

sergiotaborda

[quote=mario.fts]

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.

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

pablosaraiva

pedroroxd:

Nem entre isso? (Sendo jcombo um JComboBox)

String a =String.valueOf(jcombo.getSelectedItem()); String b = jcombo.getSelectedItem().toString(); String c = (String) jcombo.getSelectedItem();

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();
pedroroxd

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

pablosaraiva

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

pedroroxd

A vontade =)

M

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

mario.fts

[quote=sergiotaborda]

mario.fts:
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.

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

Não tenho certeza. Olhando o bytecode gerado, a tradução é igual tanto para i++, i+=1 e i = i +1.

0 iconst_0
1 istore_0
2 iinc 0 by 1
5 return

esse é o bytecode gerado para estes tres métodos

private static void teste1() { int ctOne = 0; ctOne++; }

private static void teste2() { int ctTwo = 0; ctTwo = ctTwo + 1; }

private static void teste3() { int ctThree = 0; ctThree += 1; }

Criado 16 de dezembro de 2009
Ultima resposta 17 de dez. de 2009
Respostas 20
Participantes 11