这段代码数组越界怎么修改

package beibao01;

import java.util.Scanner;

public class p1832 {

static int b[]=new int[1005],count[]=new int[1005];
static int p=0;
public static void main(String[] args) {
    Scanner inner=new Scanner(System.in);
    int t=0;
    int n;int dp[][]=new int[1005][1005];
    
      n=inner.nextInt();
      yushu(n);
      for(int i=0;i<p;i++) {
          for(int j=n;j>=count[i];j--) {
              dp[i][j]=Math.max(dp[i-1][j], dp[i][j-n]+count[i]);
          }
          if(dp[i][n]==n) {
              t++;
          }
      }
      System.out.print(t);
}
public static void yushu(int a) {
    
    for(int i=0;i<a+1;i++) {
        b[i]=1;
    }
    b[0]=0;b[1]=0;
    for(int i=1;i<=a;i++) {
        count[p]=i;
        for(int j=2*i;j<=a;j+=i) {
            b[j]=0;
        }
        p++;
    }
}

}
问题提示:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1

package com.test;

import java.util.Scanner;

public class ArrayTest {
static int b[]=new int[1005],count[]=new int[1005];
static int p=0;
public static void main(String[] args) {
Scanner inner=new Scanner(System.in);
int t=0;
int n;
int dp[][]=new int[1005][1005];
n=inner.nextInt();
yushu(n);
for(int i=0;i<p;i++) {
for(int j=n;j>=count[i];j--) {
dp[i][j]=Math.max(dp[i][j], dp[i][n-j]+count[i]);// 这里的改动,
}
if(dp[i][n]==n) {
t++;
}
}
System.out.print(t);
}
public static void yushu(int a) {
//目的是设置在数组b中存入指定数量元素前两个是0.剩下的是1
for(int i=0;i<a+1;i++) {
b[i]=1;
}
b[0]=0;b[1]=0;
for(int i=1;i<=a;i++) {
count[p]=i;
for(int j=2*i;j<=a;j+=i) {
b[j]=0;
}
p++;
}
}
}