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