输入两个正整数a, b,求[a, b]内完全平方数的个数。( 1 ≤ a ≤ b ≤ 10^9 ) 测试时输入有极大的数,如:385793959 712365911 ,因此要用long类型存储。
时间: 2023-09-11 11:05:12 浏览: 176
有效的完全平方数(二分查找)1
### 回答1:
题目要求计算区间[a, b]内完全平方数的个数,完全平方数是指可以表示为某个整数的平方的数。因此,我们可以从a到b遍历每个数,判断其是否为完全平方数,如果是,则计数器加1。
具体实现时,可以使用long类型存储输入的a和b,使用一个计数器count记录完全平方数的个数,然后从a到b遍历每个数,判断其是否为完全平方数,如果是,则计数器加1。判断一个数是否为完全平方数可以使用sqrt函数,如果sqrt函数返回的结果是整数,则说明该数是完全平方数。
代码如下:
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
long a = scanner.nextLong();
long b = scanner.nextLong();
int count = 0;
for (long i = a; i <= b; i++) {
if (Math.sqrt(i) % 1 == 0) {
count++;
}
}
System.out.println(count);
}
}
```
### 回答2:
要求解输入范围内完全平方数的个数,可以使用一个循环来遍历从a到b之间的所有数字,然后判断每个数字是否是完全平方数。
完全平方数是指一个数是另一个整数的平方,例如4是2的平方,所以4是一个完全平方数。判断一个数是否是完全平方数有多种方法,这里使用一个简单的方法,即判断一个数x是否是某个数n的平方,只需计算√x的结果,如果结果为整数,则说明x是完全平方数。
对于给定的输入范围,由于可能有极大的数输入,为了避免溢出,需要使用long类型来存储中间结果和最终结果。
下面是使用Java语言实现的代码:
```java
import java.util.Scanner;
public class CountPerfectSquares {
public static void main(String[] args) {
// 输入两个正整数a, b
Scanner scanner = new Scanner(System.in);
long a = scanner.nextLong();
long b = scanner.nextLong();
scanner.close();
// 初始化完全平方数的个数为0
int count = 0;
// 遍历从a到b之间的所有数字
for (long i = a; i <= b; i++) {
// 判断当前数字i是否为完全平方数
long sqrt = (long) Math.sqrt(i);
if (sqrt * sqrt == i) {
count++;
}
}
// 输出结果
System.out.println(count);
}
}
```
以上代码通过循环遍历[a, b]内的每个数字,对每个数字进行判断是否是完全平方数,最后输出完全平方数的个数。由于输入值可能非常大,因此需要使用long类型来存储中间结果和最终结果。
阅读全文