Déterminer le nombre premier par la saisie de l'utilisateur à l'aide de méthode récursive
J'ai besoin de créer un programme en Java qui détermine si un nombre est premier.
L'utilisateur doit entrer un nombre, et le programme permettra de déterminer s'il est premier ou non, et l'affichage "non prime" ou "le premier." Mon code compile et s'exécute, mais il dit toujours un nombre n'est pas premier, même si il est.
import java.util.Scanner;
public class PrimeNumber
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
int constant = 0;
int variable = 0;
System.out.println("Enter a Number to test if Prime or Not");
constant = input.nextInt();
variable = constant;
double answer = 0.0;
answer = testPrime(constant, variable);
System.out.println(+answer);
if (answer == 1)
{
System.out.println(+constant + " is a prime number.");
}
else
{
System.out.println(+constant + " is NOT a prime number.");
}
}
public static double testPrime(int number, int divide)
{
double prime = 0.0;
prime = number%divide;
if (prime > 0 && divide != number)
{
return testPrime(number, divide - 1);
}
else
{
return prime;
}
}
}
- Pourquoi la récursivité? Il n'y a pas de raison d'utiliser la récursivité pour ce.
- Vous devez utiliser integer/ce. Il n'y a pas de point flottant sur les nombres premiers et c'est beaucoup plus rapide.
- C'est une force brute façon de calculer un nombre premier. Vous devriez regarder le Petit Théorème de Fermat ici ainsi que quelques autres algorithmes, si vous voulez faire de grands nombres premiers.
Vous devez vous connecter pour publier un commentaire.
Ce ne sera jamais vrai. Parce que votre fracture et le numéro sont toujours égales.
Voir que vous avez attribué
variable=constant
et c'est ce que vous passez à la méthodeCela dit, vous avez besoin d'aller si complexe pour savoir si un nombre est premier ou pas. Consulter le web pour des algorithmes simples. Voir http://www.mkyong.com/java/how-to-determine-a-prime-number-in-java/ par exemple.
Pas la réponse que l'OP veut la récursivité (devoirs, je suppose).
Il vous suffit d'aller jusqu'à la racine carrée de n, pour voir si il a un diviseur (diviseur en plus de l'auto sera < sqrt(n))
java.lang.Math.pow(n, 0.5)
oujava.lang.Math.sqrt()
i * i <= n
for(int i=3; i<till; i+=2;)
. RiaD, cette solution nécessite une multiplication chaque itération, alors que le calcul de la racine carrée est fait avant la boucle.Je vois que vous voulez de récursivité pour cela, j'ai donc converti tgkprog réponse à une méthode récursive (bien que le son est nettement plus efficace). En outre, je pense que vous pouvez revenir un facteur primordial si l'entrée n'est pas premier? Je suis juste spéculer cela à en juger par les OP de la valeur de retour d'une double au lieu d'un booléen. La mienne va retourner un int, parce que le retour d'un double est stupide.
avec la récursivité
Eh bien, je suis directement de vous donner tout le code au lieu de l'écriture de code. Espère que vous avez tous peut que ce que j'ai essayé de mon mieux pour le rendre aussi simple que possible.
Le code est :>
Bien dans le premier() j'ai pris int i , int sq et int g comme arguments.Au lieu de ces si vous le souhaitez, alors vous pouvez prendre d'autres variables.