2013-02-26 5 views
-1

Je suis je suis un débutant à java.And essaie d'imprimer 2,3,5,7,11,13,17,19Comment imprimer les nombres premiers?

Ceci est mon processus.Procédé de pensée au-dessus chiffres que je veux imprimer sont des nombres premiers ce qui signifie qu'ils ne peuvent être divisés par eux-mêmes ou la valeur 1.So i aura besoin d'avoir une condition qui est si (i% i == 0 ||% 1 == 0) {

import java.util.*; 
public class PrimePrinter{ 
    public static void main(String[] args){ 
     Scanner sc=new Scanner(System.in); 
     System.out.print("Enter num> "); 
     int input=sc.nextInt(); 

     for(int i=2;i<=19;i++){ 
      if(i%i==0&&i%1==0){ 
       System.out.print(i); 
      }else { 
       System.out.print(","); 
      } 
     } 
    } 
} 

J'essaie pour réfléchir à travers mes codes mais je me demande pourquoi il imprimera 2,3,4,5 ... et jusqu'à 19 quand j'ai déjà une condition.J'apprécierai si quelqu'un me donnera des conseils pour moi de travailler au lieu de poster les solutions.

+0

Tous les nombres composés sont également divisibles par 1 et eux-mêmes, de sorte que votre test principal ne fonctionne pas vraiment. –

+0

'i% i' et' i% 1' seront toujours '0'. – Blender

Répondre

9

Vous vérifiez seulement s'ils sont divisibles par 1 et eux-mêmes. Chaque nombre est divisible par 1 et lui-même. Les nombres premiers sont SEULEMENT divisibles par 1 et eux-mêmes, donc la manière naïve serait de tester s'ils sont divisibles par tous les autres nombres entre 1 et i.

Pour une manière plus efficace de le faire, regardez dans le tamis des ératosthènes.

2

Un nombre est premier lorsqu'il est divisé par lui-même et par 1. Et 1 n'est pas un nombre premier. Dans votre programme, vous divisez le nombre de 1, de sorte que c'est mal

import java.util.*; 
public class PrimePrinter{ 
    public static void main(String[] args){ 
     Scanner sc=new Scanner(System.in); 
     System.out.print("Enter num> "); 
     int input=sc.nextInt(); 

     // Instead of 19 you should use "input" 
     // So the program will print all the numbers which are prime till input 
     for(int i=2;i<=19;i++){ 
      if(isPrime(i)) 
       System.out.print(i+", "); 
      } 
     } 
    } 

    public static boolean isPrime(int number){ 
    for(int i=2; i<number; i++){ 
     if(number%i == 0){ 
     return false;//number is divisible so its not prime 
    } 
    return true; //number is prime 
    } 
} 
0

mais je me demande pourquoi il imprimera 2,3,4,5 ... et jusqu'à 19 ans quand je l'ai déjà une condition .

Votre code teste si un nombre est divisible par lui-même ou un seul. Mais chaque nombre (en dehors de zéro) est divisible par lui-même et un. Donc (naturellement) chaque nombre que vous avez essayé passe "le test".

Le problème est que "le test" est incorrect en tant que test pour les nombres premiers. Vous avez réellement besoin de trouver les numéros qui sont seulement divisible par eux-mêmes et un. Le moyen simple de faire ceci est de tester votre numéro contre tous les autres numéros qu'il pourrait être divisible par. Vous pouvez limiter ceci à un ensemble fini de nombres avec quelques mathématiques simples de lycée ... basées sur la définition de la division.

0

Un nombre est considéré comme premier s'il n'est divisible que par 1 et lui-même. Il peut être identifié en vérifiant la divisibilité contre 2 -> SQRT (n) (au lieu de n-1, SQRT de (n) sera suffisant). D'autres algorithmes sont également disponibles avec une meilleure efficacité, mais pour un débutant, cela sera suffisant et efficace. L'extrait de code entier est fourni ci-dessous:

public class PrimeNumberTest { 
    public static void main(String args[]) { 
     boolean isPrime = true; 
     int num = Integer.parseInt(args[0]); 
     for (int i = 2; i < Math.sqrt(num); i++) { 
      if(num != i && num % i == 0) { 
       isPrime = false; 
       break; 
      } 
     } 
     if (isPrime) 
      System.out.println(num + " is prime"); 
     else 
      System.out.println(num + " is not prime"); 
    } 
} 
Questions connexes