HDU - 2204 Eddy’s爱好

题意:

给你一个正整数N,确定在1到N之间有多少个可以表示成M^K(K>1)的数

题解:

参考题解:
我们先举例找找规律
1~10以内2的次方有多少个?有12=1,22=4,32=9,一共三个,10开方(向下取整)为3
也就是1~n之间k次方数有多少个 ,等于n(1/k),这算是个结论其实
如果我们直接按这个计算,会发现有很多重复,比如有个数是2的次方,也有可能是4的次方,也有可能是6的次方,但是这些其实在2的次方中就已经计算了,而4,8是2的倍数,所以我们只需要管素数次方就行了,一个2就涵盖了所有4,6,8等等。你也可以这么理解:如果M(ab)也可以写成(Ma)b,如果指数不是质数,那么一定可以每另外一组数字表示,且这组数字的指数是质数。所以说我们只需要统计指数是质数的数字能够组成多少个n以内的数字。
那是不是这样就没有重复了?也不是,不同数之间有可能也有,就比如一个数是6的次方,他就被素数2次方和素数3次方同时给统计了,这个要用到容斥,比如272和93会重复是因为他们都能凑出指数6,所以我们需要减去指数6所得到的个数
举个例子:
n=729
指数为2:22,32,42,52,62…272
指数为3:23,33,43,53,63…93
82=26和43=26就是重复的,我们用n计算出指数为6的个数,729(1/6)=1,那么答案就是先+指数为2的,再+指数为3的,最后减指数为6的,这是容斥为2的情况
如果重复的是2,3,5的共同倍数30,同理+2+3+5- 2 * 3 -3 * 5 - 2 * 5 + 2 * 3 * 5(结合下图应该能明白),这是容斥的层数为3的情况

那容斥为4的情况呢?题目说了n在1e18的范围内,说明mk,k取值要小于61,而2 * 3 * 5<61<2 * 3 * 5 * 7,所以容斥四层的情况不用考虑,

代码:

#include<bits/stdc++.h>
#define debug(a,b) printf("%s = %d\n",a,b);
typedef long long ll;
using namespace std;inline int read(){int s=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();//s=(s<<3)+(s<<1)+(ch^48);return s*w;
}
int p[]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61};
int main()
{ll n;while(cin>>n){ll ans=1;ll tmp;for(int i=0;;i++){tmp=(ll)pow(n,1.0/p[i]);if(tmp<2)break;//说明n开p[i]次方不足 ans+=tmp-1;for(int j=i+1;;j++){tmp=(ll)pow(n,1.0/p[i]/p[j]);if(tmp<2)break;ans-=tmp-1;for(int k=j+1;;k++){tmp=(ll)pow(n,1.0/p[i]/p[j]/p[k]);if(tmp<2)break;ans+=tmp-1;} } }cout<<ans<<endl;}return 0;
}

HDU - 2204 Eddy‘s爱好(尚未完全解决)相关推荐

  1. hdu 2204 Eddy's爱好

    求$[1,n]$种有多少正整数可以表示为$p^q$的形式,其中$p,q$为正整数,且$q \ge 2$ $1 \le n \le 10^{18}$ 1. 若$p^q \le n$,则$\forall ...

  2. HDU 2204 Eddy's爱好(容斥原理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2204 解题报告:输入一个n让你求出[1,n]范围内有多少个数可以表示成形如m^k的样子. 不详细说了, ...

  3. Eddy's爱好 HDU - 2204

    从1到n中,平方数的个数为n^(1/2),立方数的个数为n^(1/3),那么六次方的个数为n^(1/6),因为我们在算平方和立方的时候把六次方算过了,那么就要见去一次.接下来就是一个简单的容斥原理了, ...

  4. hdu2204 Eddy's爱好 打表+容斥原理

    Ignatius 喜欢收集蝴蝶标本和邮票,但是Eddy的爱好很特别,他对数字比较感兴趣,他曾经一度沉迷于素数,而现在他对于一些新的特殊数比较有兴趣. 这些特殊数是这样的:这些数都能表示成M^K,M和K ...

  5. hdu 1210 Eddy's 洗牌问题

    hdu 1210 Eddy's 洗牌问题 Problem DescriptionEddy是个ACMer,他不仅喜欢做ACM题,而且对于纸牌也有一定的研究,他在无聊时研究发现,如果他有2N张牌,编号为1 ...

  6. hdu-2204 Eddy's爱好 nyoj 526

    hdu : http://acm.hdu.edu.cn/showproblem.php?pid=2204 nyoj :  http://acm.nyist.net/JudgeOnline/proble ...

  7. HDU 1162 Eddy's picture (最小生成树)(java版)

    Eddy's picture 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1162 --每天在线,欢迎留言谈论. 题目大意: 给你N个点,求把这N个点 ...

  8. 张益唐的朗道-西格尔零点猜想的论文公布,专家认为该论文尚未完整解决零点猜想

    今年10月份,华裔数学家.美国加利福尼亚大学圣巴巴拉分校数学系教授张益唐,在北京大学大纽约地区校友会"与数学家张益唐交流座谈"活动上透露已解决朗道-西格尔零点猜想(Landau-S ...

  9. hdu 1161 Eddy's mistakes

    http://acm.hdu.edu.cn/showproblem.php?pid=1161 本题主要运用的就是大小写的转换: 我写的代码: #include<iostream> #inc ...

最新文章

  1. linux FTP服务器访问权限的问题
  2. 防止ARP欺骗的方法!!!
  3. 发表在OURDEV上的帖子
  4. CANoe CAPL文件操作目录合集
  5. java英语面试自我介绍_java的英文面试自我介绍
  6. Unity - 使用Winform制作简易登录器
  7. 指向类成员/函数的指针
  8. HDU 4183 Pahom on Wate【网络流+路径问题】
  9. ABAQUS切削模拟
  10. powerbuilder 9.0+下载 (内含补丁 build 7096)
  11. 如何抓到入侵网站的黑客?
  12. 如何设置 font-family 比较好以及字体的中英文名
  13. Python综合评价模型(五)专家评分法
  14. CNN卷积神经网络—LeNet原理以及tensorflow实现mnist手写体训练
  15. 小程序canvas 圆角框带填充颜色
  16. Xposed模块开发入门-最基本的项目创建
  17. python数据采集3-开始采集
  18. Linux入门学习-常用命令
  19. 1999-2021年各省份普通⾼等学校在校学⽣数
  20. C#让textbox不能写入

热门文章

  1. promise的状态以及api介绍_前端 api 请求缓存
  2. linux挂载4t硬盘用不了,centos7挂载新加4T硬盘到/home目录
  3. 电脑启动后黑屏只有鼠标_电脑加装固态硬盘后出现黑屏或蓝屏解决方案
  4. android 版本28 通知栏图标,【专题分析】应用图标、通知栏适配
  5. java一个界面用另一个界面的值_如何将参数/值从一个弹出窗口传递到Angular2中的另一个弹出窗口...
  6. 非抢占式优先算法例题_非抢占短作业优先算法源代码(C语言)
  7. java 8 stream 性能_java8中parallelStream性能测试及结果分析
  8. linux sed 写文件,使用sed对文件进行操作
  9. C++ 详解拷贝构造函数
  10. hdu4911 Inversion-归并排序