tenho o seguinte codigo para saber se o numero eh inteiro o nao ele faz a verificação ateh 1000
[code]public static boolean numeroPrimo(int numero){
float resultado;
for (int i =0; i < 1000; i++){
if (i != 0 && i != numero){
resultado = (float) numero /i;
//AQUI PRECISARIA SABER SE O RESULTADO DIVIDIDO PELO I EH INTEIRO OU NAO
if(resultado / i == /inteiro/){
return false;
}
}
}
return true;
[quote=Mark_Ameba]
Isso por que 3 / 2 da 1 e sobra 1.
O resultado da operação ‘%’ sempre é inteiro.[/quote]
E que tal ler bem antes de comentar? Se 3%2 é diferente de 0, então 3/2 não é inteiro.
O resto da divisão retorna o mesmo tipo de dado que você está dividindo. Se for float, retorna float, se for int, retorna int.
Caso você faça uma divisão de tipos diferentes, como float e int, por exemplo, vai retornar o tipo que comporta o maior número, no caso float.
Existe uma tabela nos livros básicos de java que mostra a relação dos dados inteiros, se puder, pesquise essa tabela e com base nos dados que serão dividos, você consegue descobrir.
Hum… pra começar, esse não é o melhor jeito de saber se um número é primo ou não.
Está simplesmente errado, e fim de papo.
O seu programa só consegue determinar se um número de 1 até 1000000 é primo; acima desse valor, você vai ter vários números considerados primos, mas que não o são. O limite correto para as divisões sucessivas é a raiz quadrada de N.
Depois, você quer saber se o número é divisível por outro (e nesse caso o resto da divisão é zero), não se o resto da divisão é inteiro (ele sempre é, pela definição de resto). Um pouco de matemática não faz mal a ninguém…
Você teria de corrigir seu programa para (e supondo que você ainda queira usar esse método grotesco das divisões sucessivas):
class EhPrimo {
public static boolean ehPrimo (int n) {
if (n == 2) return true; // aham - falha nossa
int sqrtN = (int) Math.sqrt (n);
if (n % 2 == 0) {
return false;
}
for (int i = 3; i <= sqrtN; i = i + 2) {
if (n % i == 0) {
return false;
}
}
return true;
}
public static void main (String[] args) {
System.out.println (ehPrimo (24691357));
System.out.println (ehPrimo (488560001));
}
}
Se o que você quer fazer é verificar se um numero é primo, usa o que o java ja te oferece.
Pra mim sempre funcionou.
import java.math.BigInteger;
import javax.swing.JOptionPane;
public class Primo {
public static void main(String args[]) {
String n = JOptionPane.showInputDialog(null, "Insira o numero");
if (VericaPrimo(n)) {
JOptionPane.showMessageDialog(null, "O numero [ " + n + " ] é primo");
} else {
JOptionPane.showMessageDialog(null, "O numero [ " + n + " ] não é primo ");
}
}
public static boolean VericaPrimo(String n) {
BigInteger numero = new BigInteger(n);
boolean flag = false;
if (numero.isProbablePrime(Integer.MAX_VALUE)) {
flag = true;
}
return flag;
}
}
A vantagem de você esta função é que ela muito mais rapida e ta da a resposta em tempo viavel.
Claro que deve ser. Só vi três tipos de usos para números primos aqui no GUJ:
Gente que precisa resolver um trabalho de faculdade;
Gente que precisa resolver uma daqueles programas de olimpíadas de programação, tais como os que aparecem no TopCoder ( http://www.topcoder.com/ ) ou então no Project Euler ( http://projecteuler.net/ ).
Gente que quer implementar o RSA “do zero” e não sabe que existe o tal método “isProbablePrime” que foi apresentado acima.
Pra saber se um numero eh inteiro vc faz assim #include <stdio.h>
{
int i;
float x; //seja x o numero que voce quer saber se eh inteiro, e considerando somente os positivos
//se vc quiser os negativos tambem eh soh fazer umas mudancas mas a base eh essa
scanf("%f", &x);
for(i=0;i<=x;i++)
{
if ( i == x )
printf(“X eh inteiro\n”);
}
printf(“X nao eh inteiro\n”);