Prime Number Program无效

时间:2015-07-29 20:37:25

标签: java algorithm numbers bluej

我想创建一个程序,显示素数的位置,用户输入素数索引。基本上,将显示第n个素数,其中n由用户输入。然而,该计划无效,任何帮助将不胜感激。代码写在下面,任何人都可以告诉我它有什么问题吗?

apple_array.inject(0) { |sum, e| sum + e.apples_eaten }

4 个答案:

答案 0 :(得分:2)

我弄错了

    import java.io.*;
public class Nth_Prime
{
    public static void main()throws Exception
    {
        BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Which Prime number would you like to find?");
        int n = Integer.parseInt(stdin.readLine());
        int k = 0;
        int checker = 0;
        int counter = 1;
        int num=0;

        for(int i=3;;i++)
        {
            k=0;
            checker=0;
            for(int j=2;j<i;j++)
            {
                if(i%j==0)
                {
                    checker++;
                }
            }    

            if(checker==0)
            {
                k++;
            }
            if(k!=0)
            {
                num=i;
                counter++;
            }
            if(counter==n)
            {
                System.out.println("The number is: "+num);
                break;
            }
            else
            {
                continue;
            }
        }

    }
}

这是有效的,但感谢你的帮助

答案 1 :(得分:2)

我更喜欢创建包含素数值和素数值的HashMap,尝试这个小应用程序:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;

public class Nth_Prime {

    static boolean checkPrime(int n)
    {
        for (int i=2;i<n;i++)
        {
            if(n%i==0)
                return false;
        }
        return true;
    }
    static HashMap<Integer,Integer> map=new HashMap<Integer, Integer>();
    public static void main(String[] args) throws Exception {
        BufferedReader stdin = new BufferedReader(new InputStreamReader(
                System.in));
        map.put(1, 2);
        System.out.println("Which Prime number would you like to find?");
        while(true)
        {
            int n = Integer.parseInt(stdin.readLine());
            if( n<0)
                return;
            if(map.containsKey(n))
            {
                System.out.println("The number is: " + map.get(n));

            }
            else
            {
                int size=map.size();
                int lastKey=size;//(int) map.keySet().toArray()[size-1];
                int lastValue=map.get(lastKey);
                for (int i = lastValue; i < 1000; i++) {

                    if(checkPrime(i))
                    {
                        map.put(size, i);
                        size++;
                        if(map.containsKey(n))
                        {
                            System.out.println("The number is: " + map.get(n));
                            System.out.println("Which Prime number would you like to find?");
                            break;
                        }
                    }
                }
            }


        }


    }
}

答案 2 :(得分:0)

为什么你的代码错误(提供错误的输出) ::当i25时,你的内部for循环会在{k时增加j = 2, 3, 7 ... 1}}并且在退出内部for循环后,您的if条件if(k!=0)会进行检查,因此对于25,您的k应该在{{1}附近因此,你甚至将22算作素数(这是错误的)。

尝试这样做。我将变量25替换为k,每次boolean flag我都设置为false,即i%j == 0j(表示i i不是素数,因此不计算在内。

for(int i=3;i<100;i++)
{
    boolean flag = true;
    for(int j=2;j<i;j++)
    {
        if(i%j==0)
        {
            flag = false;
            break;
        }
    }    
    if(flag)
    {
        num=i;
        counter++;
    }
    if(counter==n)
    {
            System.out.println("The number is: "+num);
            break;
    }
}

极少数优化::

1)您可以考虑将第二个for循环更改为for(int j=2;j<Math.sqrt(i);j++),因为要检查素数条件,您无需检查sqrt(i)以外的内容,因为在此之后会重复这些因素。

2)您应考虑使用Sieve of Eratosthenes作为寻找素数的更佳方式。

答案 3 :(得分:0)

尝试这种方式:

int num, count, i;
        num=1;
        count=0;
        while (count < nth){

            num=num+1; //find the next prime number 
            for (i = 2; i <= num; i++){

                if (num % i == 0) {

                    break; //prime not found
                }
            }
            if ( i == num){

                count = count+1; //prime found
            }
        }
System.out.println("The number is: "+num);