问题在注释里,运行的错误信息在程序下方。
import java.util.Arrays;
public class PrimeNumber
{
public void showPrimeNumber(int range)
{
boolean[] primes=this.sieve(range);
int number=0;
if (primes !=null)
{
int size=primes.length;
System.out.println("范围在"+range+"内的质数个数有:");
int i=0;
for (i=1; i<size; i++);
{
if(primes[i])
{
System.out.print(i+" ");
if(++number%10==0)
{
System.out.println();
}
}
}
System.out.println();
}
System.out.println("一共有"+number+"个");
}
private boolean[] sieve(int range)
{
if(range<=0)
{
System.out.println("求质数的范围range必须大于0!");
return null;
}
boolean[] isPrime=new boolean[range+1];
isPrime[1]=false;
Arrays.fill(isPrime,2,range+1,true);
int n=(int) Math.sqrt(range); //这里的n是怎么得来的,为什么是range的开方?看不懂。
for(int i=1;i<=n;i++)
{
if(isPrime[i])
{
for(int j=2*i;j<=range;j+=i)
{ isPrime[j]=false;
}
}
}
return isPrime;
}
public static void main(String[] args)
{
int range=200;
PrimeNumber test=new PrimeNumber();
test.showPrimeNumber(range);
}
}错误信息:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 201
at PrimeNumber.showPrimeNumber(PrimeNumber.java:15)
at PrimeNumber.main(PrimeNumber.java:55)这个错误怎么解决?
import java.util.Arrays;
public class PrimeNumber
{
public void showPrimeNumber(int range)
{
boolean[] primes=this.sieve(range);
int number=0;
if (primes !=null)
{
int size=primes.length;
System.out.println("范围在"+range+"内的质数个数有:");
int i=0;
for (i=1; i<size; i++);
{
if(primes[i])
{
System.out.print(i+" ");
if(++number%10==0)
{
System.out.println();
}
}
}
System.out.println();
}
System.out.println("一共有"+number+"个");
}
private boolean[] sieve(int range)
{
if(range<=0)
{
System.out.println("求质数的范围range必须大于0!");
return null;
}
boolean[] isPrime=new boolean[range+1];
isPrime[1]=false;
Arrays.fill(isPrime,2,range+1,true);
int n=(int) Math.sqrt(range); //这里的n是怎么得来的,为什么是range的开方?看不懂。
for(int i=1;i<=n;i++)
{
if(isPrime[i])
{
for(int j=2*i;j<=range;j+=i)
{ isPrime[j]=false;
}
}
}
return isPrime;
}
public static void main(String[] args)
{
int range=200;
PrimeNumber test=new PrimeNumber();
test.showPrimeNumber(range);
}
}错误信息:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 201
at PrimeNumber.showPrimeNumber(PrimeNumber.java:15)
at PrimeNumber.main(PrimeNumber.java:55)这个错误怎么解决?
public void showPrimeNumber(int range) {
boolean[] primes = this.sieve(range);
int number = 0;
if (primes != null) {
int size = primes.length;
System.out.println("范围在" + range + "内的质数个数有:");
int i = 0;
for (i = 1; i < size; i++)//这儿多了一个分号;
{
if (primes[i]) {
System.out.print(i + " "); if (++number % 10 == 0) {
System.out.println();
}
}
}
System.out.println();
}
System.out.println("一共有" + number + "个");
} private boolean[] sieve(int range) {
if (range <= 0) {
System.out.println("求质数的范围range必须大于0!");
return null;
}
boolean[] isPrime = new boolean[range + 1];
isPrime[1] = false;
Arrays.fill(isPrime, 2, range + 1, true);
int n = (int) Math.sqrt(range); //这里的n是怎么得来的,为什么是range的开方?看不懂。
for (int i = 1; i <= n; i++) {
if (isPrime[i]) {
for (int j = 2 * i; j <= range; j += i) {
isPrime[j] = false;
}
}
}
return isPrime;
} public static void main(String[] args) {
int range = 200;
PrimeNumber test = new PrimeNumber();
test.showPrimeNumber(range);
}
}
import java.util.Arrays;
public class PrimeNumber
{
public void showPrimeNumber(int range)
{
boolean[] primes=this.sieve(range);
int number=0;
if (primes !=null)
{
int size=primes.length;
System.out.println("范围在"+range+"内的质数个数有:");
int i=0;
for (i=1; i<size; i++)//;这里都了个分号
{
if(primes[i])
{
System.out.print(i+" ");
if(++number%10==0)
{
System.out.println();
}
}
}
System.out.println();
}
System.out.println("一共有"+number+"个");
}
private boolean[] sieve(int range)
{
if(range<=0)
{
System.out.println("求质数的范围range必须大于0!");
return null;
}
boolean[] isPrime=new boolean[range+1];
isPrime[1]=false;
Arrays.fill(isPrime,2,range+1,true);
int n=(int) Math.sqrt(range); //这里的n是怎么得来的,为什么是range的开方?看不懂。
//这是质数的性质:不能被其平方以下的数整除的既是质数
for(int i=1;i<=n;i++)
{
if(isPrime[i])
{
for(int j=2*i;j<=range;j+=i)
{ isPrime[j]=false;
}
}
}
return isPrime;
}
public static void main(String[] args)
{
int range=200;
PrimeNumber test=new PrimeNumber();
test.showPrimeNumber(range);
}
}
至于
//这里的n是怎么得来的,为什么是range的开方?看不懂。
这其实是求质数的一个算法,按常规我们都是从1到range,看看这个数有没有除1和自身以外的因子
但是,可以证明,到这个数的平方根就可以得出他是否为质数
//
嗬嗬,看了楼上才发现。我经常犯阿