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

解析:一个数N 开K次根后得到M  则小于M的所有数的K次方一定小于N

因为任何一个合数都能分解为素数的乘积 所以用素数即可

2^60>10^18所以,指数最大为60,打表60以内的素数。因为2*3*5*7大于60,所以最多只有三个数相乘,即三个集合相交。

#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long LL;
LL ans,n;
int i;
int prime[]={,,,,,,,,,,,,,,,,};
void dfs(int j,int num,int p)
{
if(p == )
{
LL t = pow(n,1.0/num);
t--; // 因为每次都有底数为1的情况 所以每次都要减1 最后输出时加1
if(t > )
ans += t*(i&?:(-)); //容斥定理 奇数个集合时为正 偶数个集合时为负
return;
}
if(j >= ) return; //prime里的下标最大为17
if(num * prime[j] < )
dfs(j+,num*prime[j],p-); //要本次的prime[j] 递归找下一个要的
dfs(j+,num,p); //不要本次的prime[j] 递归找要的
} int main()
{
while(cin>>n)
{
ans = ;
for(i=;i<=;i++) //如果把prime里的每一个数看作一个集合 则这个循环为枚举集合的个数
dfs(,,i);
cout<<ans + <<endl; // 加上底数为1的情况 }
return ;
}

最新文章

  1. tomcat实现域名访问步骤
  2. eayui datagrid 分页 排序 详解
  3. jQuery修改class属性和CSS样式
  4. Bzoj2154 Crash的数字表格 乘法逆元+莫比乌斯反演(TLE)
  5. LINUX centos 忘记密码
  6. ngRoute AngularJs自带的路由
  7. 如何执行一条命令在C#里面。Process
  8. aapt命令介绍及常用命令实践
  9. Bootstrap系列 -- 31.嵌套分组
  10. IQKeyboredManager使用
  11. BZOJ 1212: [HNOI2004]L语言( dp + trie )
  12. JS获取ckeditor4.x里的值
  13. [Android FrameWork 6.0源码学习] Window窗口类分析
  14. web开发性能优化---分布式篇
  15. [SDOI2011]染色
  16. 在weblogic上部署遇到的问题总结
  17. makefile 嵌套
  18. Oracle中和mysql中函数的区别
  19. tcp,Socket,三次握手和四次挥手的图示
  20. java 线程Thread.Sleep详解 Thread.Sleep(0)的作用(转载)

热门文章

  1. Django组件 之 ookie 和 session
  2. 【fetch跨域请求】cors
  3. 牛客---java练习
  4. 使用ajax请求后端程序时,关于目标程序路径问题
  5. 启动Tomcat的时候8080被占用
  6. Bootstrap知识记录:排版样式
  7. C#封装SQLite数据库
  8. select into赋值方式
  9. Codeforces 1154G Minimum Possible LCM
  10. python爬虫之Anaconda安装