1. K13577 完全立方数(cube) 题目描述 小科酷爱数学,这两天在研究完全立方数(一个数如果是另外一个整数的完全立方,我们就称这个数为完全立方数,如8=2*2*2,64=4*4*4),想通过编程解决给定范围[a,b]内有多少个不含有指定因子x的完全立方数。 输入格式 输入文件名cube.in 一行,三个整数a,b,x 输出格式 输出文件名cube.out 一行一个数,表示满足要求的完全立方数的个数 输入输出样例 输入样例1: 3 12 4 输出样例1: 0 输入样例2: 11 123 5 输出样例2: 2 说明 【样例解释1】 3到12之间有一个完全立方数8,但是4是8的因子,所以输出的应该是0; 【样例解释2】 11到123之间有两个完全立方数27和64,5都不是27和64的因子,所以输出的应该是2 【数据范围与限制】 对于30%的数据,1≤a<=b<=1000,1≤x≤100 对于50%的数据,1≤a<=b<=10^9,1≤x≤10^4 对于100%的数据,1≤a<=b<=10^18,1≤x≤10^9 【耗时限制】1000ms 【内存限制】128MBc++
时间: 2024-02-19 17:58:40 浏览: 267
“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身
5星 · 资源好评率100%
这是一道比较有难度的题目,需要分析一下题目的特点和限制。首先,我们要找出给定范围内的完全立方数,然后再判断这些数是否含有指定因子。这里有一个性质:完全立方数一定是某个数的立方,也就是说,如果一个数是完全立方数,那么它的立方根一定是整数。因此,我们只需要从 a 到 b 遍历每个数,求出它的立方根,看是否为整数即可。如果是整数,就说明这个数是完全立方数,可以计数。另外,我们还需要判断这些数是否含有指定因子,这可以使用取模运算来实现。最后,输出计数器即可。
下面是 C++ 的代码实现:
```c++
#include <iostream>
#include <cmath>
using namespace std;
int main() {
long long a, b, x;
cin >> a >> b >> x;
long long cnt = 0;
for (long long i = ceil(pow(a, 1.0 / 3)); i * i * i <= b; i++) {
long long cube = i * i * i;
if (cube % x != 0) cnt++;
}
cout << cnt << endl;
return 0;
}
```
代码解释:
- 首先输入 a、b、x 的值。
- 然后从 ceil(pow(a, 1.0 / 3)) 开始遍历每个立方数,直到立方数大于 b。
- 对于每个立方数,判断是否含有指定因子 x,如果不含有,就计数器加一。
- 最后输出计数器即可。
注意:
- 这里使用了 long long 类型,因为 a、b、x 的范围较大,需要使用长整型。
- 在遍历立方数时,需要使用 ceil 函数取立方根的上界,因为 pow 函数可能会产生浮点误差。
- 在计算立方数时,需要使用 long long 类型,避免数值溢出。
阅读全文