版权声明:未经过同意不得转载 https://blog.csdn.net/qq_42500298/article/details/83108185
题目描述
众所周知,在二维平面上,边长为 a 的正方形面积为 a2;在三维空间中,边长为 a 的立方体的体积为 a3;在 d 维空间中,边长为 a 的立方体的体积为 ad。 可怜把所有能被表示成 ad(其中 a,d 都是正整数,d ≥ 2)的正整数定义为体积数。举例来说,小于等于 10 的体积数有 4 个,分别为 1,4,8,9。 现在可怜想让你计算小于等于 n 的体积数有多少个。
输入描述:
输入一行一个整数 n。对于 的数据,n ≤ 100。对于 的数据,n ≤ 105。对于 的数据,1 ≤ n ≤ 107。
输出描述:
输出一行一个整数表示答案。
示例1
输入
10
输出
4
说明
小于等于 10 的体积数有 1,4,8,9。
示例2
输入
100
输出
13
3
说明
小于等于 100 的体积数有 1,4,8,9,16,25,27,32,36,49,64,81,100。
思路
因为要求 b ≥ 2,所以 a 一定小于等于
,所以可以枚举 a
注意两点: 运算过程可能会爆 int
要去重(开个数组就可以了)
代码
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e7+1e2;
int a[maxn],n,cnt;
int main()
{
scanf("%d",&n);
a[1]=1;
for(int i=2;i<=n;++i)
{
for(long long j=1ll*i*i;j<=1ll*n;j*=1ll*i)
{
a[j]++;
cnt++;
}
}
int ans=0;
for(int i=1;i<=n;++i)
{
if(a[i])
ans++;
}
printf("%d\n",ans);
}
来源:nkw
扫描二维码关注公众号,回复:
3596240 查看本文章