求$[1,n]$种有多少正整数可以表示为$p^q$的形式,其中$p,q$为正整数,且$q \ge 2$

$1 \le n \le 10^{18}$

1. 若$p^q \le n$,则$\forall t \le p$,有$t^q \le n$

2. $p^q \le n \Rightarrow p \le \lfloor \sqrt[q]n \rfloor$,即$[1,n]$中可以写成$p^q$的$p$的个数为$\lfloor \sqrt[q]n \rfloor$

3. $p^q=(p^{a})^{b}=(p^{b})^{a}$,其中$a$为素数

枚举素数$a$,考虑所有$p^a$形式的数如何统计入答案

对于一个数$x=p^q$,设$p$不含非$1$的平方因子,$q$有$t$个质因子

这是一个经典容斥问题,即找一个函数$f(i)$,使得$\sum\limits_{i=1}^{t}{t \choose i}f(i)=1$成立

显然$f(i)=(-1)^{i+1}$

枚举指数是由哪些素数构成的,然后乘上容斥系数即可

由于$10^{2 \times 3 \times 5 \times 7} \gt 10^{18}$,因此只需要最多枚举三个素数即可

由于$2^{60} \gt 10^{18}$,因此素数只需要枚举到$59$即可(大概有$17$个)

状态量大约为${17 \choose 1} + {17 \choose 2} + {17 \choose 3}=17+136+680=833$

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4
 5 ll n;
 6 const int N = 100;
 7 int vis[N], p[N], tot;
 8
 9 ll calc(ll x) {
10     return (long long) pow(n, 1.0 / x) - 1;
11 }
12
13 void sol() {
14     ll ans = 1;
15     for(int i = 1 ; i <= tot && calc(p[i]) ; ++ i) {
16         ans += calc(p[i]);
17         for(int j = i + 1 ; j <= tot && calc(p[i] * p[j]) ; ++ j) {
18             ans -= calc(p[i] * p[j]);
19             for(int k = j + 1 ; k <= tot && calc(p[i] * p[j] * p[k]) ; ++ k) {
20                 ans += calc(p[i] * p[j] * p[k]);
21             }
22         }
23     }
24     cout << ans << endl;
25 }
26
27 int main() {
28     for(int i = 2 ; i < N ; ++ i) {
29         if(!vis[i]) p[++ tot] = i;
30         for(int j = 1 ; j <= tot && i * p[j] < N ; ++ j) {
31             vis[i * p[j]] = 1;
32             if(i % p[j] == 0) break;
33         }
34     }
35     while(cin >> n) sol();
36 }

hdu 2204 Eddy's爱好

转载于:https://www.cnblogs.com/KingSann/articles/9554488.html

hdu 2204 Eddy's爱好相关推荐

  1. HDU - 2204 Eddy‘s爱好(尚未完全解决)

    HDU - 2204 Eddy's爱好 题意: 给你一个正整数N,确定在1到N之间有多少个可以表示成M^K(K>1)的数 题解: 参考题解: 我们先举例找找规律 1~10以内2的次方有多少个?有 ...

  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. hdu 1161 Eddy's mistakes

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

  9. Hdu - 1210 - Eddy's 洗牌问题

    因为考试所以最近都没有做什么题.想不到这题都卡(~~~~(>_<)~~~~ ),看来太久没有做题感觉变迟钝了,当然也有原因是找规律的题做得比较少,所以就这样了,看来要快快调整好,好好努力才 ...

最新文章

  1. c语言编程:输入一个数看它是不是素数
  2. 查询前几条记录SQL在不同数据库中的用法
  3. ubuntu mysql备份_Ubuntu下进行MYSQL自动备份
  4. 【转】开发人员一定要加入收藏夹的网站
  5. 人际交往的“三有三避”
  6. Bean生命周期配置
  7. VTK+MFC 系列教程 非常强大
  8. 封装绑定以BaseDataList , ListControl 为基类的函数库
  9. linux 重读环境变量,关于linux中使用source /etc/profile重新读取配置后,新的环境变量只能在当前终端里面有效,新开的终端提示 command not found...
  10. 【HTML 初学】2、HTML属性
  11. mysql trim 索引_MySQL常用函数,你真得看看!
  12. 多输出模型实例的数据加载
  13. iptables调试的小窍门 之前没想到啊 从抚琴煮酒那看的
  14. zeppelin k8s安装部署和基本使用教程(在线的分析工具)
  15. 基于jsp+servlet的 新闻管理系统。
  16. 当你的MS OFFICE打不开时,安全模式也失效,来看我给你变戏法吧
  17. 系统学习深度学习(十六)--Overfeat
  18. 企业数据总线(ESB)和注册服务管理(dubbo)的区别
  19. python回归分析波士顿房价_python 线性回归(Linear Regression)预测波士顿房价
  20. java 高效列转行,java 列转行

热门文章

  1. matlab 口号色号修改器
  2. 国外常用的免费DNS域名解析服务器(转)
  3. 7-45 循环结构7:求x+x2+x3+...+xn的值 (50 分) 输入整数x,n(x与n均为1到8之间的整数),输出x1+x2+x3+...+xn(第二个数字表示指数)的值,不能使用pow函数
  4. bat 批处理 批量调整 srt 字幕文件时间
  5. web前端css伪元素使用阿里iconfont中Unicode编码
  6. 数学黑洞(一)令人拍案叫绝的卡布列克常数
  7. 助力企业实现远程监控故障诊断
  8. Android 7.0 行为变更
  9. Django(九)模型:dj查询数据库的函数(方法)
  10. 【办公自动化】Python图像操作术