2017-10-07 4 views
-1

Je suis confus sur un projet de codage. Je suis censé retourner le plus petit nombre premier plus grand que le integer "num", par exemple smallestPrimeBiggerThan(20) devrait retourner 23 J'ai déjà le code pour déterminer si le nombre est premier, mais je ne suis pas sûr de savoir comment faire le reste du code. J'ai déjà regardé sur ce site, mais le reste des explications sont pour C et C++. Je ne suis pas sûr de savoir comment traduire le code entre C en Java. Aussi, je préférerais que ce soit un moyen simple de le compléter, car je suis nouveau pour le code et je ne sais pas grand-chose sur les parties les plus complexes (Arrays et autres).Utilisation de Java, Comment puis-je trouver le nombre premier qui est le plus petit suivant à un entier donné?

Voici un exemple pour les arguments

entier n est 80, donc le plus petit nombre premier à côté de l'entier est 83, la méthode retournerait 83

Voici une base de référence pour le code

public static void main(String[] args) { 
    System.out.println(smallestPrimeBiggerThan()); 

} 

public static int smallestPrimeBiggerThan(int num) { 

} 
+1

'while (! IsPrime (num)) {num ++; } return num; ' –

+0

@ElliottFrisch dit que l'on devait passer' 23' en entrée votre code retournerait '23' alors que OP est _supposé pour renvoyer le plus petit nombre premier plus grand que l'entier" num "_ qui devrait être' 29' –

+0

ceci le corrige: 'while (! isPrime (num)) {++ num; } return num; '(++ num va ajouter 1 à num avant de vérifier s'il est premier) –

Répondre

1

Voici un extrait que je mets ensemble (Remarque: avec l'aimable autorisation de logique et @Elliot @ Paul Lemarchand Frisch) ainsi this premier algorithme:

public static void main(String[] args) { 

    Scanner input = new Scanner(System.in); 
    System.out.print("Please enter a whole number to find the next highest prime of: "); 
    System.out.println(smallestPrimeBiggerThan(input.nextInt())); 

} 

static boolean isPrime(int n) { 
    if (n%2==0) return false; 
    for(int i=3;i*i<=n;i+=2) { 
     if(n%i==0) 
      return false; 
    } 
    return true; 
} 

public static int smallestPrimeBiggerThan(int num) { 
     while (!isPrime(num)) { 
      ++num; 
     } 
     return num; 
} 

Je sais que vous avez déjà votre algorithme principal, mais je voulais qu'il soit capable de fonctionner à partir d'un copier/coller, donc j'ai inclus sur Internet. La partie que vous cherchiez est la boucle while. Chaque fois qu'il boucle, il vérifie si num est un nombre premier, mais en incrémentant la variable en premier, donc nous ne retournons pas simplement sur une entrée principale. Si ce n'est pas une prime, incrémentez ... rincez et répétez jusqu'à ce que nous ayons un prime puis revenez.

1

Si vous souciez pas la précision, vous pouvez utiliser la méthode nextProbablePrime de BigInteger exemple class.For:

BigInteger index=new BigInteger("20"); 
System.out.println(index.nextProbablePrime()); 

Le nextProbablePrime est de trouver un premier nombre.Procédé javadoc probable:

Retours le premier entier supérieur à ce BigInteger
est probablement premier. La probabilité que le nombre renvoyé par cette méthode
soit composite ne dépasse pas 2 -100. Cette méthode
ne passe jamais par-dessus un premier lors de la recherche: si elle renvoie p, il
n'est pas premier q tel que this < q < p.