2017-02-26 2 views
-2

** _ Ce code est correct mais il échoue à des tests d'entrée plus importantsLa somme des nombres premiers inférieurs et égaux à 'n' n'est pas correcte? Qu'est-ce qui ne va pas?

La somme des nombres premiers inférieur n'est pas correct? Qu'est-ce qui ne va pas?

La somme des nombres premiers ci-dessous n'est pas correct?

somme des carrés du premier n nombres premiers

les premiers nombres premiers Résumant N [fermé]

Voici le code que je me bats avec, s'il vous plaît aidez-moi.

import java.util.*; 
public class Solution 
{ 
public static void main(String[] args) 
{ 
    int a[] = new int[10000000]; 
    int b[] = new int[1000000]; 
    int c[] = new int[1000000]; 
    Arrays.fill(a,1); 
    Scanner in = new Scanner(System.in); 
    for(int i=2;i<10000;i++) 
     if(a[i]==1) 
      for(int j=i*i;j<10000000;j+=i) 
       a[j]=0; 
    b[0]=b[1]=0; 
    int k=2; 
    for(int i=2;i<10000000;i++) 
     if(a[i]==1) 
     { 
      b[k]=i+b[k-1]; 
      c[k]=i; 
      k++; 
     } 
    int t = in.nextInt(); 
    while(t-->0) 
    { 
     int n = in.nextInt(); 
     for(int i=2;;i++) 
     { 
      if(c[i]==n) 
      { 
       System.out.println(b[i]); 
       break; 
      } 
      else if(c[i]>n) 
      { 
       System.out.println(b[i-1]); 
       break; 
      } 
     } 
    } 
} 
} 
+1

Respect de l'utilisation de l'opérateur de diapositives. Mais ne cours pas avant de pouvoir marcher. – Bathsheba

+0

quoi? Je ne peux pas t'avoir!!! –

+0

@HariKiranVusirikala, puisque c'est l'un des problèmes hackerrank et que les gens résolvent ceux-ci surtout pour s'amuser en programmant je pense qu'il vaut mieux que tu t'essayes d'abord avec des problèmes plus faciles à apprendre pour contrôler les boucles et variables avant d'aller à ce problème. Le seul conseil que je puisse vous donner est de trouver la complexité temporelle de votre solution et de penser si cela peut correspondre au délai. –

Répondre

1
import java.util.*; 

public class Solution { 

    public static void main(String[] args) { 
     int a[] = new int[10000]; 
     int b[] = new int[10000]; 
     int c[] = new int[10000]; 
     Arrays.fill(a,1); 
     Scanner in = new Scanner(System.in); 
     for(int i=2;i<1000;i++) 
      if(a[i]==1) 
       for(int j=i*i;j<10000;j+=i) 
        a[j]=0; 
     b[0]=0; 
     int k=1; 
     for(int i=2;i<10000;i++) 
      if(a[i]==1) 
      { 
       b[k]=i+b[k-1]; 
       c[k]=i; 
       k++; 
      } 
     int t = in.nextInt(); 
     while(t-->0) 
     { 
      int n = in.nextInt(); 
      System.out.println(b[n]); 
     } 
    } 
} 

Ceci est le bon code et U peut faire la somme jusqu'à 'près de 1200 (< 1300)' somme des nombres premiers. Si nous voulons aller au-delà, nous pouvons l'augmenter dans le code.

+1

mais je veux imprimer la somme des nombres premiers inférieurs à 1000. –

+1

Mais vous avez dit dans la question que vous voulez la somme des premiers n nombres premiers – krishnav1

+0

désolé pour l'erreur. –

1

Avant

int t = in.nextInt(); 
while(t-->0) 

Je mets

System.out.println("** b[1000] = " + b[1000]) ; 

et a obtenu 3.682.913! Votre somme des 1000 premiers nombres premiers est correcte. Alors, vérifiez votre boucle d'impression!

+0

Merci @bobjan, je verrai. –