entanglement 16 de dez. de 2009
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.
ale_sjn 16 de dez. de 2009
Tiburcio_Mancha 16 de dez. de 2009
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 16 de dez. de 2009
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 16 de dez. de 2009
Na verdade você quer o menor divisor diferente de 1. Pois todo os números são divisíveis por 1.
ViniGodoy 16 de dez. de 2009
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 16 de dez. de 2009
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 16 de dez. de 2009
Bom…
Se o Vini falou, tá falado.
ViniGodoy 16 de dez. de 2009
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 16 de dez. de 2009
hahahaha Eu vi.
pedroroxd 16 de dez. de 2009
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 16 de dez. de 2009
[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 16 de dez. de 2009
sergiotaborda 16 de dez. de 2009
[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 16 de dez. de 2009
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 16 de dez. de 2009
Opa…
Valew ae…
Tava impaciente, e antes de vc responder eu criei 1 tópico …
pablosaraiva 16 de dez. de 2009
Vou responder lá também então.
pedroroxd 16 de dez. de 2009
marcobiscaro2112 16 de dez. de 2009
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.
Entre 2 e N/2 ou entre 2 e raiz quadrada de N (inclusive)?
mario.fts 17 de dez. de 2009
[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;
}