检查用户的数字周围有两个素数

时间:2014-12-18 15:40:43

标签: java primes

我应该编写一个程序,接受来自用户的更大的值(当然是两个)并打印出最接近它的两个单词。我应该使用一种方法来简化过程。 例如,如果用户输入24,则两个数字是23和29。 我对它背后的数学感到困惑。我该怎么做呢?我只是想让有人把我放在正确的轨道上。万分感谢

4 个答案:

答案 0 :(得分:0)

您可以拥有首个100/1000/10000素数的“缓存”列表,如果用户输入在此范围内,您只需要找到两个最接近用户输入的数字。

然后你可以使用类似的东西(用一些ifs来整理列表开头/结尾的用户输入案例)

    for(int i=0;i<cache.size();i++){
        if(userNumber<cache.get(i)){
            indexOfSmallerPrimeNumber = i;
        }
    }
    int smallerPrimeNumber = cache.get(indexOfSmallerPrimeNumber);
    int biggerPrimeNumber = cache.get(indexOfSmallerPrimeNumber+1);

当用户输入的数字大于您的缓存时,您将计算下一个数字(对于大数字可能会耗费大量时间)。您可以将sieve of Eratosthenes algorithm用于此目的。

答案 1 :(得分:0)

计算素数有几种可能性。例如。筛选Eratosthenes或筛选阿特金

答案 2 :(得分:0)

我做了这样的事; 我写两个for循环来扫描两侧,并找到素数的主要方法。

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int minPrime = 0;
        int maxPrime = 0;
        System.out.println("Please give a number ");
        int number = scanner.nextInt();
        for (int i = number - 1; i > 2; i--) {
            if (isPrime(i)) {
                minPrime = i;
                break;
            }
        }
        for (int i = number + 1; i < Integer.MAX_VALUE; i++) {
            if (isPrime(i)) {
                maxPrime = i;
                break;
            }
        }
        System.out.println(minPrime);
        System.out.println(maxPrime);
    }

    static boolean isPrime(int n) {
        if (n < 2)
            return false;
        for (int i = 2; i < n; i++) {
            if (n % i == 0)
                return false;
        }
        return true;
    }

答案 3 :(得分:0)

这可能对你有帮助......

您可以根据需要自定义它。在我的测试中它完美运行。

import java.util.Scanner;
class Prime {
    static boolean isPrime(int val)
    {
        for(int i=val/2;i>1;i--)
        {
            if(val%i==0)
                return false;
        }
        return true;
    }
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("Enter a number:");
        int num=input.nextInt();
        for(int i=num-1;i>2;i--)
        {
            if(isPrime(i))
            {
                System.out.println("First prime no.: "+i);
                break;
            }
        }
        for(int i=num+1;;i++)
        {
            if(isPrime(i))
            {
                System.out.println("Second prime no.: "+i);
                break;
            }
        }
        input.close();
    }
}