如何使用Java中的一种方法将素数打印到N

如何使用Java中的一种方法将素数打印到N,java,Java,我正在尝试创建一个void方法,它将素数打印到给定的int参数。这就是我所拥有的,但它不起作用 public class listPrimes { public static void main(String[] args) { printPrimes(1000); } static void printPrimes(int max) { int counter = 0; for (int i = 2; i <= max; i++) {

我正在尝试创建一个void方法,它将素数打印到给定的int参数。这就是我所拥有的,但它不起作用

public class listPrimes {
    public static void main(String[] args) {
        printPrimes(1000);

    }

static void printPrimes(int max) {
    int counter = 0;
    for (int i = 2; i <= max; i++) {
        for (int n = 2; n < i; n++) {
            if (i % n == 0) {
                counter++;
            }
        }
        if (counter == 0) {
            System.out.println(i);
            counter = 0;
        }
    }
}
}
公共类listPrimes{
公共静态void main(字符串[]args){
打印素数(1000);
}
静态无效打印素数(int max){
int计数器=0;

对于(int i=2;i您永远不会重置
外循环
中的
计数器
的值。因此,一旦它增加,它将永远不会为0。因此,只需在外循环的开始处重置
计数器
:-

for (int i = 2; i <= max; i++) {
    counter = 0;
    for (int n = 2; n < i; n++) {
        if (i % n == 0) {
            counter++;
        }
    }
    if (counter == 0) {
        System.out.println(i);
    }
}

for(int i=2;i您永远不会重置
外循环
中的
计数器
的值。因此,一旦它增加,它将永远不会为0。因此,只需在外循环开始时重置
计数器
:-

for (int i = 2; i <= max; i++) {
    counter = 0;
    for (int n = 2; n < i; n++) {
        if (i % n == 0) {
            counter++;
        }
    }
    if (counter == 0) {
        System.out.println(i);
    }
}

对于(int i=2;i一个变量,为了获得更好的性能:

public static void main(String[] args) {
    printPrimes(100);
}

public static void printPrimes(int range) {
    for (int iCounter=1; iCounter<=range; ++iCounter) {
        if (iCounter <= 1) continue;
        if (iCounter == 2 || iCounter == 3) {
            System.out.println(iCounter);
            continue;
        }
        if (iCounter%2 == 0) continue;
        int iCounterSqrt = (int) Math.sqrt(iCounter);

        boolean bPrime = true;
        for (int iDenom=3; iDenom <= iCounterSqrt; iDenom += 2) {
            if (iCounter % iDenom == 0)
                bPrime = false;
        }

        if (bPrime) {
            System.out.println(iCounter);
        }
    }
}
publicstaticvoidmain(字符串[]args){
打印素数(100);
}
公共静态无效打印素数(整数范围){

对于(int iCounter=1;iCounter一个变量,为了获得更好的性能:

public static void main(String[] args) {
    printPrimes(100);
}

public static void printPrimes(int range) {
    for (int iCounter=1; iCounter<=range; ++iCounter) {
        if (iCounter <= 1) continue;
        if (iCounter == 2 || iCounter == 3) {
            System.out.println(iCounter);
            continue;
        }
        if (iCounter%2 == 0) continue;
        int iCounterSqrt = (int) Math.sqrt(iCounter);

        boolean bPrime = true;
        for (int iDenom=3; iDenom <= iCounterSqrt; iDenom += 2) {
            if (iCounter % iDenom == 0)
                bPrime = false;
        }

        if (bPrime) {
            System.out.println(iCounter);
        }
    }
}
publicstaticvoidmain(字符串[]args){
打印素数(100);
}
公共静态无效打印素数(整数范围){
对于(int iCounter=1;iCounter
/*
*要更改此许可证标题,请在“项目属性”中选择“许可证标题”。
*要更改此模板文件,请选择工具|模板
*然后在编辑器中打开模板。
*/
包javaapplication4;
/**
*
*@作者sahadev&vignesh
*/
类素数集合{
公共静态void main(字符串[]args){
int r,s=0,k=0;
int i,j;
整数a[]=新整数[50];
对于(i=2;k
/*
*要更改此许可证标题,请在“项目属性”中选择“许可证标题”。
*要更改此模板文件,请选择工具|模板
*然后在编辑器中打开模板。
*/
包javaapplication4;
/**
*
*@作者sahadev&vignesh
*/
类素数集合{
公共静态void main(字符串[]args){
int r,s=0,k=0;
int i,j;
整数a[]=新整数[50];
对于(i=2;k
公共类ListPrime{
公共静态void main(字符串[]args){
打印素数(1000);
}
静态无效打印素数(int max)
{
对于(int k=2;k
公共类listPrimes){
公共静态void main(字符串[]args){
打印素数(1000);
}
静态无效打印素数(int max)
{

对于(intk=2;k,如果您使用大量数据来测试,那么使用SQRT将更有效。

Scanner reader=新的扫描仪(System.in);
System.out.println(“输入a号”);
int num=reader.nextInt();
int计数器=0;
int root=0;
布尔素数标志;

如果(2如果您使用大量数据进行测试,那么使用SQRT将更有效。

Scanner reader=新的扫描仪(System.in);
System.out.println(“输入a号”);
int num=reader.nextInt();
int计数器=0;
int root=0;
布尔素数标志;

if(2这里是Javascript中获取素数直到'n'的代码。这是一个优化的代码,您可以相应地重构代码。基本逻辑:对于每个数字,我检查它是否可以被我们已经找到的任何素数整除,直到它小于或等于i/2

function getPrimesTill(n){
  var i, j, len, limit, result = [];
  for(i=2;i<n;i++){
      limit = i/2;
      len = result.length;
      isPrime = true;
      for(j=0;len && result[j]<=limit;j++){
          if(i%result[j] == 0){
              isPrime = false;
              break;
          }
      }
      if(isPrime) result.push(i);
  }
  return result;
}
getPrimesTill(100);
函数getPrimesTill(n){ var i,j,len,limit,result=[];
对于(i=2;i,这里是在Javascript中获取素数直到'n'的代码。这是一个优化代码,您可以相应地重构代码。基本逻辑:对于每个数字,我检查它是否可以被我们已经找到的任何素数整除,直到它小于或等于i/2

function getPrimesTill(n){
  var i, j, len, limit, result = [];
  for(i=2;i<n;i++){
      limit = i/2;
      len = result.length;
      isPrime = true;
      for(j=0;len && result[j]<=limit;j++){
          if(i%result[j] == 0){
              isPrime = false;
              break;
          }
      }
      if(isPrime) result.push(i);
  }
  return result;
}
getPrimesTill(100);
函数getPrimesTill(n){ var i,j,len,limit,result=[]; 对于(i=2;i您可以通过以下步骤减少计算机查找素数所需的时间!

  • 你只需要检查新的数字是否可以被素数之前的数整除
  • 你只需要做这个直到被检查的数字的平方根
  • 你只需要检查一个数字,如果它是一个公正的数字
所以我要这样做:

publicstaticvoidsearchprimes(){
列表素数=新的ArrayList();
系统输出打印ln(2);
循环:
对于(长x=3;x<100;x+=2){
int y=0;
while(素数get(y)
这是我找到的最干净、最快的方法!

通过以下步骤,您可以减少计算机查找素数的时间!

  • 你只需要检查新的数字是否可以被素数之前的数整除
  • 你只需要做这个直到被检查的数字的平方根
  • 你只需要检查一个数字,如果它是一个公正的数字
所以我要这样做:

publicstaticvoidsearchprimes(){
列表素数=新的ArrayList();
系统输出打印ln(2);
循环:
对于(长x=3;x<100;x+=2){
int y=0;
while(素数get(y)

这是我找到的最干净、最快的方法!

最简单的方法

private static void nPrimeNumber(int n) {
    boolean result = true;
    for (int i = 2; i <= n; i++) {
        result = true;
        for (int j = 2; j < i; j++) {
            if (i % j == 0 ) {
                result = false;
                break;
            }
        }
        if(result){
            System.out.print(i+" ");
        }
    }
}
private static void nPrimeNumber(int n){
布尔结果=真;

对于(inti=2;i而言,是n的最简单方法

private static void nPrimeNumber(int n) {
    boolean result = true;
    for (int i = 2; i <= n; i++) {
        result = true;
        for (int j = 2; j < i; j++) {
            if (i % j == 0 ) {
                result = false;
                break;
            }
        }
        if(result){
            System.out.print(i+" ");
        }
    }
}
private static void nPrimeNumber(int n){
布尔结果=真;

对于(int i=2;i您的代码有什么问题?输出错误?在第一种方法中,它打印出来的都是2和3,原因如下!我希望这是出于性能原因,您尝试使用单一方法,如果是这样的话,可能会保留已发现素数的记录,并只对较大的“n”的每次迭代进行测试……应该会发现它的速度快了一个数量级比递增地检查你已经测试过的许多非素数除数要好得多。有什么问题吗
private static void nPrimeNumber(int n) {
    boolean result = true;
    for (int i = 2; i <= n; i++) {
        result = true;
        for (int j = 2; j < i; j++) {
            if (i % j == 0 ) {
                result = false;
                break;
            }
        }
        if(result){
            System.out.print(i+" ");
        }
    }
}