Java 获取素数

Java 获取素数,java,math,Java,Math,请看一下下面的代码 public class Prime { public static void main(String[]args) { int i = 2; int counter = 0; while(true) { if(counter==6)//Count still 6 { break; }

请看一下下面的代码

public class Prime
{
    public static void main(String[]args)
    {
        int i = 2; 
        int counter = 0;

        while(true)
        {


            if(counter==6)//Count still 6
            {
                break;
            }
            else
            {
                if(getPrimes(i)==true)
                {

                    i++;
                    counter++;
                    System.out.println("Counter: "+counter);
                }
                else
                {
                    System.out.println("No");
                }
            }
        }
    }

    static boolean getPrimes(int num)
    {

        boolean result = false;
        int i = 2;

            while(true)
            {
                if((num%i) != 0) //if the number cannot be divided by any other number (except 1 and it self) it is prime
                {
                    result = true;
                    System.out.println(num);
                    System.out.println("I is: "+i);
                    i=2;
                    break;
                }

                else //Not a prime. Repeat the process
                {
                    result = false;
                    i++;
                }
            }

            return result;
     }       
}
在这里,我试图得到0-6之间的所有素数。这是从一个非常大的数字中得到数千个素数的测试用例。然而,它并不是只显示素数,而是显示每一个数字


我做错了什么?请帮忙

我想你需要这样的东西:

public void getPrimes(int a){
    for(int i = 2; i < a; i++){
        int inCounter = 0;
        if(counter%i==0){
            System.out.println("false");
            inCounter++;
        }
        if(inCounter == 0){
            System.out.println("Prime: "+counter);
        }
    }
}
public void getPrimes(int a){
for(int i=2;i
在你的循环中尝试这个答案

static boolean getPrimes(int num)
{

    boolean result=true;     // incase u gave 1 or 2 as input.....
    int i = 2;
    int mid=num/2; 

    while(i<mid)
    {
         if(num%i==0)
         {
               result=false;   // not a prime and breaks...
               break;
         }
         else
         {
               result=true;    // the loop make result as true.....  

         }
         i++;
     }
     return result;
}
静态布尔getPrimes(int num)
{
布尔结果=true;//如果您输入了1或2。。。。。
int i=2;
int mid=num/2;
而(i使用筛子,或

下面是Robert Sedgewick在Java中的Eratosthenes实现:


我想我找到了解决办法。至少,我找到了我需要的答案。这是我的答案

import java.math.BigInteger;

public class Problem7
{
    public static void main(String[]args)
    {
        int i = 0;
        int counter = 0;

        while(true)
        {

            if(i>6)
            {
                break;
            }

            if(i>1)
            {
                String str = String.valueOf(i);

                if (new BigInteger(str).isProbablePrime(i/2))
                {
                    System.out.println(str);
                     counter++;
                }
            }
            i++;

        }

    }
}
我想这是最简单的方法…

导入java.util.Scanner;
import java.util.Scanner;
class PrimeNumbers2
{
   public static void main (String[] args)
   {        
      Scanner scanner = new Scanner(System.in);
      int i =0;
      int num =0;
      //Empty String
      String  primeNumbers = "";
      System.out.println("Enter the value of n:");
      int n = scanner.nextInt();
      for (i = 1; i <= n; i++)         
      {                   
         int counter=0;           
         for(num =i; num>=1; num--)
         {
        if(i%num==0)
        {
        counter = counter + 1;
        }
     }
     if (counter ==2)
     {
        //Appended the Prime number to the String
        primeNumbers = primeNumbers + i + " ";
     }  
      } 
      System.out.println("Prime numbers from 1 to n are :");
      System.out.println(primeNumbers);
   }
}
类素数2 { 公共静态void main(字符串[]args) { 扫描仪=新的扫描仪(System.in); int i=0; int num=0; //空字符串 字符串素数=”; System.out.println(“输入n的值:”); int n=scanner.nextInt(); 对于(i=1;i=1;num--) { 如果(i%num==0) { 计数器=计数器+1; } } 如果(计数器==2) { //将素数追加到字符串 素数=素数+i+“”; } } System.out.println(“从1到n的素数是:”); System.out.println(素数); } }

它将显示所有素数。

用最小迭代查找素数

布尔IsPrimeNumber(int num){

boolean isPrime=true;
如果(num==1 | | num==0)
isPrime=false;
否则{
int limit=(int)Math.sqrt(num);

对于(长i=2L;i),答案解决了素数问题。还有一个问题:如果
getPrimes
返回
false
,你的主循环将被卡住并无限期地继续,因为在这种情况下,你永远不会增加
i
计数器
。另外,任何时候你写
write(true)
,你应该退后一步,更仔细地审视你的逻辑。99%的时候,你可以在控制结构中加入一个更智能的终止条件。1%的情况存在,但很少见。@MarkByers:这是我一直讨厌的问题!不,这不是TTTTTT。只是我为建立我的逻辑而做的一件小事IQ@Sepala当前位置我没有试图保护你。我只是想帮你澄清你的问题。将来,你可以试着从一开始就记住把这些信息放在你的问题中,因为这将有助于a)帮助人们针对你的情况发布更合适的答案,b)避免人们问“你讨厌的问题”因为你已经告诉了他们答案。@Sepala:当你发现要检查的“否”是复合数字时,你应该从代码中分离出来……而不是我认为你是用另一种方式做的……非常感谢你的回答。+1来自我:)如果你发现答案足够正确,你可以勾选答案……:)不需要其他部分。如果部分不正确,结果标志将在初始化时为true。非常感谢您的回复。+1来自我。:)非常感谢您的回复。+1来自我:)
    boolean isPrime = true;
    if (num == 1 || num ==0)
        isPrime = false;
    else{

        int limit = (int) Math.sqrt(num);
        for (long i = 2L; i <=limit ; i++)
            if (num % i == 0) {
                isPrime = false;
                break;
            }
    }

    return isPrime;

}