Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Allan Carlos dos Santos G

ler 1 número e imprimir todos os números primos entre ele e 10 * o núm

Recommended Posts

Galera queria saber se esse algoritmo ta certo...


public class Primos {


int n1;

int total = 0;

int i, j;

String texto;



public void calculaPrimo(){


this.total = this.n1 * 10;

for(this.i = 1;this.i < this.total;this.i++){

for(this.j = 1;this.j < this.i; this.j++){

if(this.j % this.i == 0){


this.texto = " " + this.i;



}

}

}


}


}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sério. O que é i e o que é j?
Seu algoritmo está errado porque

 

1- o exercício não pede que seja entre 1 e 10, e sim entre um número qualquer e seu múltiplo de 10 (olhe os laços);

2- sempre vai imprimir qualquer número, já que todo inteiro é divisível por 1.

public class AlgoMath {
    public static void genPrimos(int numero) throws IllegalArgumentException {
        int limiteSuperior = 10 * numero;
        int i, divisor;
        if (numero == 1)
             throw new IllegalArgumentException("O número 1 não é considerado primo nem composto.");
 
        for(i=numero; i<=limiteSuperior; i++) {
            for(divisor = 2; divisor < i && i % divisor != 0; divisor++);
            if (divisor >= i) {
                System.out.println(i);
            }
        }
    }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

fiz assim, mas ta dizendo que a primeira expressão do for ta errado, estranho...

 

olha:

public class Primos {
int numero;
int limiteSuperior;
int i, divisor;
public void calculaPrimo(){
limiteSuperior = 10 * numero;
for(i = numero; i < = limiteSuperior; i++){
for(divisor = 2; divisor < i && i % divisor == 0; divisor++){
if (divisor >= i) {
System.out.println(i);
}
}
}
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Está errado porque a princípio você não inicializa a variável numero.

O seu for interno está errado. Esse for é vazio mesmo. O que ele faz é iterar enquanto não encontrar nenhum divisor no intervalo [2,N). O laço termina com divisor = i, o que indica que só há 2 divisores: 1 e i ,então o número é primo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

inicializei com zero e nada:

 

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package modelo;
/**
*
* @author Allan
*/
public class Primos {
int n1 = 0;
int limiteSuperior;
int i, divisor;
String texto;
public void calculaPrimo(){
limiteSuperior = 10 * n1;
for(i = n1; i < = limiteSuperior; i++){
for(divisor = 2; divisor < i && i % divisor == 0; divisor++){
if (divisor >= i) {
texto = texto + " ";
}
}
}
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Funciona, sim. Você tem que copiar certo.
Já falei que o for interno é vazio.

import java.util.Scanner;
 
public class AlgoMath {
   public static void genPrimos(int numero) {
      int limiteSuperior = 10 * numero;
      int i, divisor;
 
      for (i = numero; i <= limiteSuperior; i++) {
         for (divisor = 2; divisor < i && i % divisor != 0; divisor++);
 
         if (divisor >= i && i > 1) {
            System.out.println(i);
         }
      }
   }
 
   public static void main(String[] args) {
      Scanner cin = new Scanner(System.in);
      Integer n = cin.nextInt();
      genPrimos(n);
      cin.close();
   }
}

Rodando no eclipse, se eu informar 1, a saída é 2,3,5,7.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.