我正在研究应用程序,它应该显示数字的最大因素,它也必须是素数。
这是我的应用程序:
public class BiggestFactor {
public static void main(String[] args) {
double dev = 0d;
for (double j = 0; j < 984654354654d; j++) {
if (984654354654d % j == 0) {
dev = j;
}
// show dev when is a prime number
double i;
for (i = 2; i < dev; i++) {
double n;
n = dev % i;
if (n == 0) {
// do nothing - not a prime number
break;
}
}
if (i == dev) {
System.out.println(dev);
}
}
}
}
我的问题是如何获得最后一个数字?在我的情况下,我得到一堆数字。
答案 0 :(得分:3)
minimal 更改是声明一个新变量result
:
double result = -1;
而不是打印dev
,只需将其值保存在result
:
if (i == dev) {
result = dev;
}
然后,在功能结束时,打印result
:
System.out.println(result):
答案 1 :(得分:1)
public class BiggestFactor
{
public static void main(String[] args)
{
double dev = 0d;
double last = dev;
for (double j = 0; j < 984654354654d; j++)
{
if (984654354654d % j == 0)
{
dev = j;
}
double i;
for (i = 2; i < dev; i++)
{
double n;
n = dev % i;
if (n == 0)
{
break;
}
}
if (i == dev)
{
last = dev;
}
}
System.out.println(last);
}
}
答案 2 :(得分:0)
我做了一些重构,并在另一个函数中移动了检查素数的逻辑,以便更好地理解。同时将数字更改为1001
以提高验证速度:P
public class BiggestPrimeFactor {
public static void main(String[] args) {
double dev = 0d;
double numberToCheck = 1001d;
for (double j = 0; j <= numberToCheck / 2; j++) {
if (numberToCheck % j == 0 && isPrime(j)) {
dev = j;
}
}
System.out.println(dev);
}
private static boolean isPrime(double n) {
boolean prime = true;
for (long i = 2; i <= n / 2; i += 2) {
if (n % i == 0) {
prime = false;
break;
}
}
return prime;
}
}
基本上,不断更新dev
成为当前最重要的因素是什么呢。