Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我怎样才能减少for循环中的迭代次数,从而减少执行时间?_Java_For Loop - Fatal编程技术网

Java 我怎样才能减少for循环中的迭代次数,从而减少执行时间?

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();

在这里,我找到了给定范围内的完美平方数的个数

但我处理的是“for”循环执行,它需要很多时间来执行

索引/键从两个数字(比如A到B)进行遍历,并在for循环中执行一些操作

当A和B之间存在较大差异(例如A=2和B=100000)时,就会出现问题

你能建议我如何减少或优化执行时间吗

        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不在我这边,奇怪