-4

次のコードをご覧ください

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までのすべての素数を取得しようとしています。これは、非常に大きな数から数千の素数を取得するためのテストケースです。ただし、素数だけを表示しているのではなく、すべての数を表示しています。

私はここで何を間違っているのですか?助けてください!

4

6 に答える 6

4

この答えを試してください...urループで

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;
}
于 2012-07-01T08:27:54.973 に答える
2

私はあなたがこのようなものが必要だと思います:

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);
        }
    }
}
于 2012-07-01T08:16:22.503 に答える
0

エラトステネスまたはアトキンスのいずれかのふるいを使用してください

これが、JavaでのRobertSedgewickによるEratosthenesの実装です。

http://introcs.cs.princeton.edu/java/14array/PrimeSieve.java.html

于 2012-07-01T14:05:42.113 に答える
0

私は解決策を見つけたと思います。少なくとも、私は必要な答えを見つけました。これが私の答えです

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++;

        }

    }
}

これが最も簡単な方法だと思います...

于 2012-07-01T17:51:46.893 に答える
0
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);
   }
}

すべての素数が表示されます。

于 2016-02-02T08:46:54.653 に答える
0

最小の反復で素数を見つける

boolean IsPrimeNumber(int num){

    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;

}
于 2017-02-27T05:04:16.347 に答える