números primos[finalizado]

galera, começei um curso de java ontem, e desenvolvemos esse código-fonte aqui>

[code]public class SemTitulo {
public static void main(String[] arg) {
String linhastr = “”;

int a [] = new int[15000];

	for(int arranjo = 0; arranjo < a.length; arranjo+=10){
		a[arranjo] = a.length - arranjo;
   System.out.println(a[arranjo]);

}
}
}[/code]

esse arranjo exibe todos os numeros multiplos de 10 desde 15000 até 0
agora, para ele retornar somente os numeros primos nesse período, como eu organizo o comando if?

Tenta assim

[code]public class SemTitulo {
public static void main(String[] arg) {
String linhastr = “”;

int a [] = new int[15000];

    for(int arranjo = 0; arranjo < a.length; arranjo+=10){
        a[arranjo] = a.length - arranjo;
        System.out.println(a[arranjo]);
         if (a[arranjo]/2==0) {
         System.out.println (a[arranjo]);

}
}}[/code]

Veja se esta certo pois fiz agora de cabeça nem testei

Vlw

Se achar um número primo fosse assim tão fácil :frowning:

Ta aqui

import java.util.*; class Sieve { private BitSet bs; int a = 15000; public void findPrimes (int a) { bs = new BitSet (n+1); int sq = (int) Math.sqrt (n); // Ao final desta rotina, todos os bits marcados serão primos, e os // bits desmarcados serão números compostos. bs.set (0, n, true); // marcando todos os bits como primos... // Agora vamos achar o primeiro bit primo, e desmarcar todos os bits // que são múltiplos dele. Vamos começar por 3 int x = 2; while (x <= sq) { for (int i = x + x; i <= n; i += x) { bs.clear (i); } // Devemos achar o próximo bit setado que seja maior que x x = bs.nextSetBit (x + 1); } } public boolean isPrime (int n) { return bs.get (n); } public static void main(String[] args) { Sieve s = new Sieve(); s.findPrimes (775146); for (int i = 1; i <= 100; ++i) { System.out.println (i + " is " + (s.isPrime(i) ? "prime" : "not prime")); } } }

Scoobydoo, o cara eh iniciante!

C mata o véi com isso! =D

[code]package guj;

public class SemTitulo {
public static void main(String[] arg) {
//numeros primos de inicial ate final
int ini = 1;//nao coloque menor q 1 senão lá embaixo entra em loop infinito
int fin = 15000;
int atual;
int primo;

    for(int i = ini; i <= fin; i++){
        primo = 0;
        atual = i;
        //verifica se é primo
        for(int j = atual; j >= 1; j--){
            if(atual%j==0){
                primo = primo + 1;
            }
        }
        //só é primo se for divisivel por 1 e ele mesmo
        if(primo==2){
            System.out.println(atual);
        }
    }
}

}[/code]

Usando uma lógica mais simples:

public static void gerarPrimos(int ate) { int numero=ate; boolean isPrimo = true; for(int x=numero;x>1;x--){ if(numero%x == 0){ isPrimo = false; }else{ isPrimo = true; } } if(isPrimo==true){ System.out.println("O numero "+numero+" é primo."); }else{ System.out.println("O numero "+numero+" não é primo."); } }
Agora é so chamar dentro de cada posição do array:

SemTitulo.gerarPrimos(meuArray[meuIncice]);

Testa ai!

P.S: Fiz aqui mesmo no fórum, sem testar! DA uma olhada!

bão, eu peguei o do fabricio lá em cima, e testei, corrigi uns trancos, e aqui o código

[code]public class SemTitulo {
public static void main(String[] arg) {
String linhastr = “”;

int a [] = new int[50];

	for(int arranjo = 0; arranjo < a.length; arranjo++){
		a[arranjo] = a.length - arranjo;

// System.out.println(a[arranjo]);
if (a[arranjo]/2==0) {
System.out.println (a[arranjo]);

}
}
}
}

//Porém, esse código retorna sempre em 1…[/code]

os outros ainda não testei, vo ver agora um por um :smiley:

Iniciante ou não ele tem que aprender…

ah me enganei msm ao inves do / e o %

% = resto da divisão desculpa aew pessoal

[quote=Scoobydoo]Iniciante ou não ele tem que aprender…
[/quote]
Verdade.

Como eu disse que poderia fazer usando o array, vou postar aqui uma forma de fazer esta verificação para ajudar ele a entender melhor como seria a implementação. Agora basta juntar com o que ele quer.

[code]/

public class NumerosPrimos {

public static void gerarPrimos(int ate) {
    int[] meuArray = new int[ate];       
    boolean isPrimo = true;
    
    //carrega o array[]
    for(int x=0;x<meuArray.length;x++){
        meuArray[x]=x;
    }

    for (int x = 0; x < meuArray.length; x++) {
        for (int y = meuArray[x]; y > 1; y--) {
            if (meuArray[x] % y == 0) {
                isPrimo = false;
            } else {
                isPrimo = true;
            }
        }
        if(isPrimo==true){
            System.out.println("O numero " + meuArray[x] + " é primo.");
        }else{
            System.out.println("O numero " + meuArray[x] + " não é primo.");
        }
    }
}

public static void main(String[] arg) {
    NumerosPrimos.gerarPrimos(50);

}

}
[/code]

[quote]ah me enganei msm ao inves do / e o %

% = resto da divisão desculpa aew pessoal[/quote]
Dae vc acha os pares (cuja divisão por 2 tem resto 0)

[quote]
Iniciante ou não ele tem que aprender… [/quote]
Concordo, até pq isso eh menos programação e mais conhecimento matemático, definição!
É bom ter diversas maneiras de resolver o mesmo problema!
Mas p. ex, o algoritmo q eu propus tem complexidade O(n^2), o seu tem isso só no findprimes, além da recursividade, que dá log(n)k ou nlog(n), n lembro ao certo!
Eu particularmente gosto de soluções modulares, recursivas! Mais fácil entender, mais OO!

Valeu pelo complemento da explicação

Acredito que da forma com que fiz seja certa dentro do

problema porém não testei os outro codigos

Valeu abraço

[quote=fabricioempresa]Valeu pelo complemento da explicação

Acredito que da forma com que fiz seja certa dentro do

problema porém não testei os outro codigos

Valeu abraço[/quote]

tá certa sim, só que os primos tem de retornar os restos diferentes de zero(to procurando o simbolo pra isso…)
e um número primo não é divisível nem por 2 nem por 3, mas a lógica é essa mesma, eu vou tentar de novo hj a tarde, botando o if de 3 dentro do if d 2, ou tentar(ainda não fiz, então não posso dizer q sei) usar um else if, ou algo do genero, e imprimindo o resultado.

acho que vai funfa…

anyway, valeu a força gente, eu posto o que eu consegui depois 8)

Outro erro meu

public class SemTitulo {     
    public static void main(String[] arg) {     
  String linhastr = "";   
  
    int a [] = new int[15000];   
  
        for(int arranjo = 0; arranjo < a.length; arranjo+=10){   
            a[arranjo] = a.length - arranjo;   
            System.out.println(a[arranjo]);   
             if (a[arranjo]%2!=0) {               // se for diferente de 0 = primo   
             System.out.println (a[arranjo]);   
}   
}}  

Acho que não errei mais nada ahahuahhua :smiley:

[quote]Outro erro meu
view plaincopy to clipboardprint?
public class SemTitulo {
public static void main(String[] arg) {
String linhastr = "";

int a [] = new int[15000];     

    for(int arranjo = 0; arranjo &lt; a.length; arranjo+=10){     
        a[arranjo] = a.length - arranjo;     
        System.out.println(a[arranjo]);     
         if (a[arranjo]/2!=0) {               // se for diferente de 0 = primo     
         System.out.println (a[arranjo]);     

}
}}

Acho que não errei mais nada ahahuahhua [/quote]

Fabricioempresa, assim vc encontrará tds numeros ímpares!
Suponhamos que a[arranjo] seja 9
9/2 = 4.5
4.5 != 0
Dae ele imprime 9, mas 9 n eh primo!

Mesmo se o operador fosse %
9%2 = 1
1 != 0
Logo tb seria impresso! E 9 tb n eh primo!
Essa solução não é tão trivial assim!

Vejam a solução que propus anteriormente!
A do Scoobydoo tb está certa, e mais precisa computacionalmente falando, mas porém mais complexa!

Poh realmente não devo ter lido direito as respostas pois eu realmente so buscava os no ímpares foi mal aew :x

Bom. eu consegui usando apenas o if (mas os resultados… bom, vcs podem ver ai em baixo:

[code] public class SemTitulo {
public static void main(String[] arg) {
String linhastr = “”;

int a [] = new int[16];  
  
    for(int arranjo = 0; arranjo < a.length; arranjo++){  
        a[arranjo] = a.length - arranjo;   
      if (a[arranjo]%2!= 0){
        if (a[arranjo]%3!= 0);{
          
          
    System.out.println (a[arranjo]);  
          
        }
      }  
    }  
}

}[/code]

ele tá sem erros de compilação e tudo, mas quando vc executa ele, ele retorna os numeros multiplos de 5 que são ímpares também, eu imagino que mais um comando if resolva… claro, o 2 não é retornado, pois ele retorna zero quando dividido por 2, mas o 2 é o único primo par tbm…

embora eu tenha gostado do resultado, está longe de ser exato (falta o 2 e precisa de aprimoramentos 8))

Maurício, você não percebeu?

O primeiro cara que lhe respondeu não sabe a diferença entre “ímpares” e “primos”. Não vá na onda dele.

Crie um método que determine se um determinado número é primo ou não (pode ser aquele de ficar dividindo o número, que você viu num dos posts). Aí você chama esse método para cada número.

Outra forma, já que você sabe usar arrays, é o tal do “crivo de Eratóstenes”. Dê uma procuradinha nele, que é o que o professor provavelmente vai querer que você faça.

Alguém está tentando ensinar você que um número é primo se ele não for divisível por 2 ou por 3. Conforme você viu, 5 já dá problemas porque é primo.

Se você for nessa onda, então teste contra os seguintes números, se você quer saber se os números entre 1 e 15000 são primos:

2 , 3, 5, 7, 11, 13, 17, 19, 23, 29,
31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
73, 79, 83, 89, 97, 101, 103, 107, 109, 113

Se um número não for divisível por nenhum desses números acima, e se ele estiver abaixo de 16128, então ele é primo. (Isso é verdade mesmo).

Só que você viu que isso é meio esquisito, não?

Se por acaso você tentar o algoritmo com o número 16129, que não é primo (na verdade ele é 127 x 127), o seu algoritmo já indicará um resultado incorreto.

[quote=entanglement]Maurício, você não percebeu?

O primeiro cara que lhe respondeu não sabe a diferença entre “ímpares” e “primos”. Não vá na onda dele.

Crie um método que determine se um determinado número é primo ou não (pode ser aquele de ficar dividindo o número, que você viu num dos posts). Aí você chama esse método para cada número.

Outra forma, já que você sabe usar arrays, é o tal do “crivo de Eratóstenes”. Dê uma procuradinha nele, que é o que o professor provavelmente vai querer que você faça.[/quote]

bom… eu vi uma vez em um livro que a regra básica para primos é q ele não é dividido nem por 3 nem por 2, mas isso tá longe de funcionar pra todos os numeros, como no caso dos multiplos d 5…

bom, eu só tenho uma aula ainda, mas eu tenho um material aqui, e vo da uma estudada, depois eu faço com métodos mais exatos.

embora eu ainda não entenda como busca recurso, como nos q utilizam import, eu pego o jeito ;D
vo ver o crivo, depois eu te digo o que saiu disso tudo :wink: