2016-12-17 2 views
1

J'ai écrit ce programme pour générer des nombres premiers entre deux valeurs. Cela fonctionne parfaitement pour les valeurs entières. J'ai essayé de le faire fonctionner pour des valeurs entières longues mais le programme se termine sans traitement à chaque fois que de longues valeurs entières sont entrées. S'il vous plaît aidez-moi à trouver le problème avec le code
Le code se déroule comme suit.Premier générateur en Java

public class Prime_generator 
{ 
    public static void main(String[] args) { 
     Scanner src = new Scanner(System.in); 
     Prime_generator obj = new Prime_generator(); 
     int t, i, a; 

     t = src.nextInt(); 
     if (t > 10) 
      System.exit(0); 
     long a1[] = new long[t]; 
     long a2[] = new long[t]; 

     for (i = 0; i < t; i++) { 
      a1[i] = src.nextLong(); 
      a2[i] = src.nextLong(); 
     } 
     for (a = 0; a < t; a++) 
     { 

      if (a1[a] >= 1 && a1[a] <= 1000000000 && a2[a] >= 1 && a2[a] <= 1000000000 && a2[a] - a1[a] <= 100000 && a1[a] <= a2[a]) 
       obj.prime(a1[a], a2[a]); 
      else 
       System.exit(0); 
     } 

    } 
    void prime(long m, long n) 
    { 
     long j,k; 
     long c=0L; 
     for(j=m;j<=n;j++) 
     { 
      c=0L; 
      for(k=2;k<j/2;k++) 
      { 
       if((long)j%k==0L) 
       c++; 

      } 
      if(c==0L) 
       System.out.println(j); 
     } 
     System.out.println(" "); 

    } 
} 
+2

débordement Probablement entier – GurV

Répondre

0

c'est la limite de taille dans le statut if. vous devriez utiliser une limite longue, vous utilisez un entier ici. c'est un exemple si statment avec de longs

if (a1[a] >= 1 && a1[a] <= 1000000000000000l && a2[a] >= 1 && a2[a] <= 1000000000000000l && a2[a] - a1[a] <= 1000000000000000l && a1[a] <= a2[a]) 
+0

Merci. Ça a marché. –

+0

Votre bienvenue. ne pas oublier de marquer la réponse comme correcte :) –