我正在创建一个对消息进行编码和解码的应用程序。我使用RSA加密技术,所以我需要使用素数。我已经想出如何使用方法判断数字是否为素数
public int checkPrime(int number)
{
//Is this number greater than 0
for(int i = number-1; i > 0; i--)
{
if((number % i) == 0)
{
if(i == 1)
{
System.out.println("is a prime");
isPrime = true;
}
else
{
System.out.println("is not a prime");
isPrime = false;
}
break;
}
}
return number;
}
所以这打印出来是否是巅峰时期。 但我想要做的是不断向用户询问一个数字,如果它不是素数。 我要求用户在名为MenuMethods的类中输入输入,然后将其响应设置为变量,然后创建Encrypt类的实例。
//---------------------------------------------------------------------------------------
// Name: userInput
// Description: This method is used in the MainApp to give the user capability to enter
// the details when adding details of an employee into the store.
//---------------------------------------------------------------------------------------
public static Encrypt userInput()
{
//String temp = keyboard.nextLine();
Encrypt encrypt = new Encrypt();
System.out.println("Please enter the Public Key: ");
int publicKey = keyboard.nextInt();
encrypt.checkPrime(publicKey);
System.out.println("Please enter the Private Key: ");
int privateKey = keyboard.nextInt();
encrypt.checkPrime(privateKey);
return encrypt = new Encrypt(publicKey,privateKey);
}
有人可以帮我解决这个问题....
答案 0 :(得分:2)
您想要做的是使用while
循环:
while(!checkPrime(input)) {
System.out.println("Please enter a prime number: ");
input = keyboard.nextInt();
}
并将checkPrime
的返回值更改为布尔值。
同样,对于检查素数,如果你检查你的号码n
是否可以被2和sqrt(n)之间的数字分割就足够了。
答案 1 :(得分:2)
让你的checkPrime方法有一个布尔返回类型,如果是prime则返回true,否则返回false,如下所示:
public boolean checkPrime(int n)
{
boolean ret = true;
for(int i = 2; i<=((int)Math.sqrt(n));i++)
{
if(n%i==0)
{
ret = false;
break;
}
}
return ret;
}
然后使用类似于此的while循环:
int n = 4; //or any non-prime value
while(!checkPrime(n))
{
n = /*input*/;
}
答案 2 :(得分:1)
int number;
do{
System.out.print("give a prime number:");
numnber=getNumber();
}while(!checkPrime(number));
答案 3 :(得分:0)
以下代码检查数字是否为素数:
boolean isPrime = false;
for (int i = 2; i <= c; i++)
{
if (number % i != 0)
{
isPrime = false;
break;
}
}