package Testing;
import java.util.Scanner;
public class test {
public static void main (String[] args){
Scanner scan1 = new Scanner(System.in);
System.out.print("Input positive integer: ");
int n = scan1.nextInt();
for (int i = 2; i < Math.sqrt(n); i++){
if (n % i == 0){
System.out.print(n/i);
}
}
}
}
当我运行此代码时,每当我输入50时,它最终会打印数字2510.我做错了什么?
答案 0 :(得分:1)
正如评论中提到的,你非常接近,但是在找到答案后你需要停止迭代。这可以通过break
关键字完成,该关键字退出最内层循环。
for (int i = 2; i < Math.sqrt(n); i++){
if (n % i == 0){
System.out.print(n/i);
break;
}
}
答案 1 :(得分:1)
当你找到第一个素因子时,你必须停下来。不要忘记,在您的示例中Math.sqrt(n)
是每个循环计算的。
public static int getLargestFactor(int num) {
for (int i = 2, max = (int)Math.sqrt(num); i <= max; i++)
if (num % i == 0)
return num / i;
return num;
}