体积数

版权声明:未经过同意不得转载 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 一定小于等于 n 0 . 5 n^0.5 ,所以可以枚举 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 查看本文章

猜你喜欢

转载自blog.csdn.net/qq_42500298/article/details/83108185