题意:求\(1 - N(1\le N \le 1e18)\)中,能表示成\(M^k(M>0,k>1)\)的数的个数

分析:正整数p可以表示成\(p = m^k = m^{r*k'}\)的形式,其中k'为素数。枚举幂k,求出满足\(p^k\le N\)的最大的\(p\),则对于当前的\(k\),任意小于\(p\)的正整数\(p'\),都有\(p'^{k}<N\),因此在\(1-N\)范围内有\(N^{\frac{1}{k}}\)个满足条件的数。

因为\(2^{60}>10^{18}\),所以枚举到的k'最多不超过60,预处理出60以内的所有素数。

又\(2*3*5=30,2*3*5*7=210>60\),所以最多只考虑3个素幂次相乘的情况。

但是如此枚举会出现重复的情况,例如\((2^{3})^{2} = (2^{2})^{3} = 2^6\)在枚举\(k=2\)和\(k=3\)时重复了,根据容斥的思想,枚举到偶数个素幂次相乘时,减去该结果。

*注意每次计算\(N^{\frac{1}{k}}\)时,减去1的情况,最后将结果加1,因为1在每种情况中都会出现,不必重复。

  1. #include<stdio.h>
  2. #include<iostream>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<vector>
  6. #include<cmath>
  7. using namespace std;
  8. typedef long long LL;
  9. const int maxn = 1e5+5;
  10. const LL prime[20] ={2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59};
  11. const int len = 17;
  12. const double eps =1e-8;
  13. LL ans;
  14. LL N;
  15. void dfs(int pos,int num,int tot,LL k = 1)
  16. {
  17. if(k>60) return;
  18. if(num==tot){
  19. LL p = (LL)(pow(N,1.0/(0.0+k))+eps)-1;
  20. ans +=p;
  21. return;
  22. }
  23. if(pos==len) return;
  24. dfs(pos+1,num,tot,k);
  25. dfs(pos+1,num+1,tot,k*prime[pos]);
  26. }
  27. int main()
  28. {
  29. #ifndef ONLINE_JUDGE
  30. freopen("in.txt","r",stdin);
  31. freopen("out.txt","w",stdout);
  32. #endif
  33. while(scanf("%lld",&N)==1){
  34. LL res= 0;
  35. for(int i =1;i<=3;++i){
  36. ans=0;
  37. dfs(0,0,i);
  38. if(i&1) res+=ans;
  39. else res-=ans;
  40. }
  41. res+=1;
  42. printf("%lld\n",res);
  43. }
  44. return 0;
  45. }

HDU - 2204 Eddy's爱好 (数论+容斥)的更多相关文章

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

    <题目链接> 题目大意: Ignatius 喜欢收集蝴蝶标本和邮票,但是Eddy的爱好很特别,他对数字比较感兴趣,他曾经一度沉迷于素数,而现在他对于一些新的特殊数比较有兴趣. 这些特殊数是 ...

  2. hdu 2204 Eddy's爱好 容斥原理

    Eddy's爱好 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem ...

  3. HDU 2204 Eddy's爱好(容斥原理dfs写法)题解

    题意:定义如果一个数能表示为M^k,那么这个数是好数,问你1~n有几个好数. 思路:如果k是合数,显然会有重复,比如a^(b*c) == (a^b)^c,那么我们打个素数表,指数只枚举素数,2^60 ...

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

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

  5. hdu 2204 Eddy's爱好

    // 一个整数N,1<=N<=1000000000000000000(10^18).// 输出在在1到N之间形式如M^K的数的总数// 容斥原理// 枚举k=集合{2,3,5,7,11,1 ...

  6. POJ 1150 The Last Non-zero Digit 数论+容斥

    POJ 1150 The Last Non-zero Digit 数论+容斥 题目地址: id=1150" rel="nofollow" style="colo ...

  7. 数论 + 容斥 - HDU 4059 The Boss on Mars

    The Boss on Mars Problem's Link Mean: 给定一个整数n,求1~n中所有与n互质的数的四次方的和.(1<=n<=1e8) analyse: 看似简单,倘若 ...

  8. 数论 + 容斥 - HDU 1695 GCD

    problem's Link mean 给定五个数a,b,c,d,k,从1~a中选一个数x,1~b中选一个数y,使得gcd(x,y)=k. 求满足条件的pair(x,y)数. analyse 由于b, ...

  9. hdu 5792(树状数组,容斥) World is Exploding

    hdu 5792 要找的无非就是一个上升的仅有两个的序列和一个下降的仅有两个的序列,按照容斥的思想,肯定就是所有的上升的乘以所有的下降的,然后再减去重复的情况. 先用树状数组求出lx[i](在第 i ...

随机推荐

  1. 表达式树在LINQ动态查询

    动态构建表达式树,最佳实践版,很实用! public class FilterCollection : Collection<IList<Filter>> { public F ...

  2. 哪些工具可以在word中快速绘制图形

    在数学试卷.论文.电子教案等编写过程中,我们经常要作出数学图形或图像,若用Word自身携带的绘图工具绘制,多有不便.比如一些曲线的形状很难画得像,画到位,作图时修修改改,颇为费力,所以需要借助一些辅助 ...

  3. Appium移动自动化测试(一)--工具软件安装

    Appium移动自动化测试(一)--工具软件安装 详情参考-- http://www.cnblogs.com/fnng/p/4552438.html 第一节  安装node.js Appium 官方网 ...

  4. redis的简单操作

    今天在代码中使用hset存入redis中:jedis.hset(key.getBytes(), field.getBytes(), ObjectInfoPojo); 需要在redis中去验证数据是否存 ...

  5. 本地存储数据库indexedDB实现离线预览的功能

    今天在学习<高级JS编程>,看到离线存储,cookie和session都十分的熟悉,但是书中还提到了indexedDB和webSQL(已废弃),indexedDB可以像mysql一样建表, ...

  6. index封装

    就是求元素在父级当中的位置: 思路: <!DOCTYPE html> <html lang="en"> <head> <meta char ...

  7. ios笔试题(选择题)

    1-10 C语言 & 计算机基础 1.请看下面一段代码 static int a = 1; int main(){ int b = 2; char *c = NULL; c = (char * ...

  8. MySql在Linux上实现每天自动备份

    Mysql自动备份 创建存放备份sql的文件夹 mkdir /jimisun/mysqlBackup 测试命令行备份数据库 /usr/bin/mysqldump --opt -uroot -pjimi ...

  9. spring boot 加载jsp

    1.spring boot启动类继承SpringBootServletInitializer ,并且重写configure方法 package com.springapp.mvc;import jav ...

  10. 160601、Websocet服务端实现

    今天是六一儿童节,祝愿小朋友们节日快乐!大朋友们事事顺心! Websocet服务端实现 WebSocketConfig.Java ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...