编写C++代码,判断0-100内有几个数既是平方数,又是立方数
时间: 2023-05-25 22:03:58 浏览: 72
#include <stdio.h>
#include <math.h>
int main() {
int count = 0; // 计数器,记录符合条件的数的个数
for (int i = 0; i <= 100; i++) { // 枚举数字
int m = sqrt(i); // 计算平方根
int n = cbrt(i); // 计算立方根
if (m * m == i && n * n * n == i) { // 如果同时是平方数和立方数
count++; // 记录个数
printf("%d ", i); // 输出符合要求的数字
}
}
printf("\n共有%d个数同时是平方数和立方数\n", count); // 输出符合条件的数的个数
return 0;
}
相关问题
编写C++代码,判断0-100内有几个数既是平方数,又是立方数,时间复杂度要最低
一种较为简单的方法是,只需要将所有的平方数和立方数都先算出来,然后再遍历一遍0-100的数,看看有多少个数即是平方数又是立方数。
具体的代码如下:
```c
#include <stdio.h>
int main() {
int i, j;
int square[10], cube[5];
int count = 0;
// 先把0-100内的平方数都算出来
for (i = 0; i <= 10; i++) {
square[i] = i * i;
}
// 再把0-100内的立方数都算出来
for (i = 0; i <= 5; i++) {
cube[i] = i * i * i;
}
// 遍历0-100内的数
for (i = 0; i <= 100; i++) {
// 判断当前数是否是平方数
for (j = 0; j <= 10; j++) {
if (square[j] == i) {
// 如果是平方数,再判断它是否是立方数
for (j = 0; j <= 5; j++) {
if (cube[j] == i) {
count++;
}
}
break;
}
}
}
printf("0-100内有%d个数既是平方数,又是立方数。\n", count);
return 0;
}
```
这里主要利用了两个数组,一个存储0-10内的平方数,一个存储0-5内的立方数。然后再用双重循环分别遍历这两个数组,寻找是否存在同一个数,即可得到有多少个数既是平方数又是立方数。
这种方法的时间复杂度为O(1),因为只需要在最开始算一次平方数和立方数,遍历0-100的数只需要O(1)的时间,所以总的时间复杂度为O(1)。
C++判断一个数既是平方数,又是立方数
一个数同时为平方数和立方数,实际上就是找一个数既满足 $x^2=n$,又满足 $x^3=n$,即找一个数使得 $x^6=n^3$ 成立。那么我们可以通过求出这个数的立方根和平方根,然后再验证 $x^6=n^3$ 是否成立来判断。
具体来说,先求出该数的立方根和平方根,即 $a=\sqrt[3]{n}$ 和 $b=\sqrt{n}$,然后再判断 $a^2=b$ 是否成立,如果成立,说明该数既是平方数,又是立方数。
代码实现如下:
```c
#include <stdio.h>
#include <math.h>
int main() {
int n;
scanf("%d", &n);
double a = cbrt(n); // 求立方根
double b = sqrt(n); // 求平方根
if (a*a == b) { // 判断是否同时为平方数和立方数
printf("%d 同时为平方数和立方数。\n", n);
} else {
printf("%d 不同时为平方数和立方数。\n", n);
}
return 0;
}
```