将素数从1-100打印到单独的文件中?

时间:2017-04-12 18:32:09

标签: java io

我必须打印一个数字列表1-100,这些数字都是素数。必须将这些素数打印到单独的.txt文件中。

import java.io.*;
public static boolean isPrime(int number)
{
int division = 0;

if(number<1)
{
  return false;
}

for(division=1; division<=number; division++)
{
  if(number%division==0)
  {
    division+=1;
  }
  if((number%division>2) || (number==1) || (number==-1))
  {
    return false;
  }


}
return true;

}

public static void main(String[] args) throws IOException
{
  PrintWriter fileToWrite = new PrintWriter("primeNumberList.txt");

  for(int currentNumber=1; currentNumber<=100; currentNumber++)
  {
    if(isPrime(currentNumber))
    {
      fileToWrite.println(currentNumber);
    }
  }
  fileToWrite.close();
  System.out.println("The prime numbers have been listed in the file primeList.txt");
}

}

我有这个代码,每当我运行它时,只会打印数字。我能做些什么来改变它?

3 个答案:

答案 0 :(得分:0)

这看起来像是一个家庭作业问题,因此我将避免使用完整的代码解决方案。

另外,你的最后一句似乎是截止的 - 我猜测你是说你打印的数字不是素数。

您可能想要关注的一件事是Sieve of EratosthenesisPrime,正如您所定义的那样,无法正常工作。

第一个条件if (number % divisor) == 0总是对于1是真的(所以迭代器不应该从那里开始),如果它对任何值都是真的&GT; 1,然后number不是素数,函数应返回false

另外值得注意的是,范围不应为division<=number,因为number%number始终为0。

isPrime中的第二个条件从找不到的角度来看并没有用。

Eratosthenes的Sieve是一个更优雅的寻找者,而不是仅仅运行低于数字的所有整数,但它的实现留给了学生。

祝你好运!

答案 1 :(得分:0)

您的isPrime功能不起作用,请尝试以下代码: -

public static boolean isPrime(int number)
{       
    for(int division = 2; division < number; division++) {
        if(*MATHS FOR PRIME*)
            return false;
    }

    return true;    
}

从2开始,即第一个素数,并循环所有数字,然后查看它是否均匀分配。我已经拿出了数学但你应该能够通过快速谷歌找到它。

答案 2 :(得分:0)

这是你的问题:

if((number%division>2) || (number==1) || (number==-1))

第一个条件是如果数字和除法的模数大于2则返回false。 ,这将在循环的第一次迭代中对于大于3的每个数字发生。 正确的循环将是这样的:

for(division=2; division<number; division++)
{
  if(number%division == 0)
  {
    return false;
  }
}