Java 我怎样才能减少for循环中的迭代次数,从而减少执行时间?
在这里,我找到了给定范围内的完美平方数的个数 但我处理的是“for”循环执行,它需要很多时间来执行 索引/键从两个数字(比如A到B)进行遍历,并在for循环中执行一些操作 当A和B之间存在较大差异(例如A=2和B=100000)时,就会出现问题 你能建议我如何减少或优化执行时间吗Java 我怎样才能减少for循环中的迭代次数,从而减少执行时间?,java,for-loop,Java,For Loop,在这里,我找到了给定范围内的完美平方数的个数 但我处理的是“for”循环执行,它需要很多时间来执行 索引/键从两个数字(比如A到B)进行遍历,并在for循环中执行一些操作 当A和B之间存在较大差异(例如A=2和B=100000)时,就会出现问题 你能建议我如何减少或优化执行时间吗 Scanner in = new Scanner(System.in); int A = in.nextInt(); int B = in.nextInt();
Scanner in = new Scanner(System.in);
int A = in.nextInt();
int B = in.nextInt();
int cnt = 0;
for(int number =A ; number<= B; number++){
int sqrt = (int) Math.sqrt(number);
if(sqrt*sqrt == number) {
cnt++;
}
}
System.out.println(cnt);
Scanner-in=新的扫描仪(System.in);
int A=in.nextInt();
int B=in.nextInt();
int-cnt=0;
对于(int number=A;number而不是遍历范围内的每个数字并确定其是否为完美正方形,我建议如下
找到起始数字的平方根并找到其整数部分。
假设起始数是5,所以平方根的整数部分是2。
现在对范围结束编号执行相同操作
假设结束范围是1000,那么它的平方根的整数部分是31。现在从2+1迭代到31,并继续打印它的平方。这将为您提供给定范围之间的完美平方。与其遍历范围中的每个数字并确定它是否是完美平方,我建议如下
找到起始数字的平方根并找到其整数部分。
假设起始数是5,所以平方根的整数部分是2。
现在对范围结束编号执行相同操作
假设结束范围是1000,那么它的平方根的整数部分将是31。现在从2+1迭代到31,并继续打印它的平方。这将得到给定范围之间的完美平方。我找到了另一种方法来计算给定范围之间的完美平方数
这可以通过使用Math.floor和Math.ceil操作简单地实现
Math.floor(Math.sqrt(B)) - Math.ceil(Math.sqrt(A)) + 1
谢谢!:)我找到了另一种方法来计算给定范围内的完美平方数
这可以通过使用Math.floor和Math.ceil操作简单地实现
Math.floor(Math.sqrt(B)) - Math.ceil(Math.sqrt(A)) + 1
谢谢!:) 您还可以检查Math.srt(number)
返回的double是否为整数,而不是if(sqrt*sqrt==number)
。算法将变为如下所示:
for(int number =A ; number<= B; number++){
if((Math.sqrt(number) % 1) == 0) {
cnt++;
}
}
for(int number=A;number而不是if(sqrt*sqrt==number)
还可以检查Math.srt(number)
返回的双精度是否为整数。算法如下:
for(int number =A ; number<= B; number++){
if((Math.sqrt(number) % 1) == 0) {
cnt++;
}
}
for(int number=A;number)可用于检查完美正方形faster@Natecat:您的链接似乎已被删除。它给出了一个404。@statefi不在我这边,您可以用它来检查完美方块faster@Natecat:您的链接似乎已被删除。它给出了一个404。@statefi不在我这边,奇怪