Java 检查用户输入的数字周围有哪些两个素数

Java 检查用户输入的数字周围有哪些两个素数,java,primes,Java,Primes,我应该编写一个程序,接受用户提供的大于2的值,并打印出离它最近的两个prim数字。我应该用一种方法来简化这个过程。 例如,如果用户输入24,则两个数字是23和29。 我只是对它背后的数学感到困惑。我该怎么做呢?我只是希望有人能让我走上正轨。多亏了一吨,你可以有一个前100/1000/10000素数的缓存列表,如果用户的输入在这个范围内,你只需要找到两个最接近用户输入的数字 然后,您可以在一些ifs中使用类似的方法来排序列表开头/结尾的用户输入案例 for(int i=0;i<cac

我应该编写一个程序,接受用户提供的大于2的值,并打印出离它最近的两个prim数字。我应该用一种方法来简化这个过程。 例如,如果用户输入24,则两个数字是23和29。
我只是对它背后的数学感到困惑。我该怎么做呢?我只是希望有人能让我走上正轨。多亏了一吨,你可以有一个前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);

当用户输入大于缓存的数字时,您将需要计算下一个数字,这对于大数字来说可能很耗时。您可以为此目的使用

有几种可能计算素数。例如,埃拉托什尼筛或阿特金筛,我就是这样做的; 我写了两个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;
    }
这可能会帮助你

您可以根据需要定制。在我测试时,它工作得很好

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();
    }
}

它应该测试所有人。我也想到了,然后你必须使用一些素数生成算法。比如说,埃拉霍斯筛,好吧,让我们假设我同意你的计划。我遇到的困难是确定哪些数字与之接近。你为什么把我的问题都记下来?我只是想问一下,因为我很困惑,这就是这个网站的目的。这不是问题,而是测试哪两个素数最接近这个值,简单地向上和向下筛选,直到找到一个素数?好的,我遵循这个。如果我是对的,.Max值只会打印上素数是的,就是这样。对于24,这两个数字是23和29,对于30,这两个数字是29和31。我的答案是真的吗,我不明白?哦,天哪,我不是这个意思!我的意思是我之前的评论很愚蠢。你完全正确,我尊重你,非常感谢。我很高兴能帮助你:-你可以通过第二步将搜索时间减半,并确保你只测试奇数的素数。如果给定的数字是奇数,则从该数字开始搜索,然后执行步骤2。如果编号为偶数,则从n+1和n-1开始搜索,然后执行步骤2。如果答案之一是2,那就很容易挑出它。@rossum是的,你是对的。这将使搜索时间减半。最近的两个素数,还是它周围的两个素数?例如,如果给定58,您是否期望59和61个素数与58之间的最小距离,或53和59个上一个素数58和下一个素数58之间的最小距离。当给定一个素数作为输入时,您期望得到什么?