2017-02-26 38 views
-2

** _此代碼正確,但未能通過更大的輸入測試案例下面的等於'n'的素數總和不正確?怎麼了?

下面的素數總和不正確?怎麼了?

下面的素數總和不正確?

前n的平方和素數

總結前N素數[關閉]

這是我與戰鬥的代碼,請幫幫我。

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

尊重使用滑動操作符。但在走路之前不要跑步。 – Bathsheba

+0

是什麼?我無法得到你! –

+0

@HariKiranVusirikala @HariKiranVusirikala,因爲它的一個hackerrank問題和人們解決這些問題的主要方法是在編程時獲得樂趣,我認爲在遇到這個問題之前首先嚐試使用更簡單的問題來學習控制循環和變量。只有提示我可以給你這裏是試圖找到解決方案的時間複雜性,並認爲如果這可以適合時間限制。 –

回答

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]); 
     } 
    } 
} 

這是正確的代碼和U可以做到總和高達「近1200(< 1300)」素數之和。 如果我們想超越,我們可以在代碼中增加它。

+1

但我想打印1000以下的質數總和。 –

+1

但是你在問題中說U想要對前n個素數總和 – krishnav1

+0

抱歉。 –

1

之前

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

我把

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

,並得到3682913! 您的前1000個素數的總和是正確的。 因此,請檢查您的印刷循環!

+0

謝謝@bobjan,我會看到的。 –

相關問題