Eddy's爱好

Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2901    Accepted Submission(s): 1416

Problem Description

Ignatius 喜欢收集蝴蝶标本和邮票,但是Eddy的爱好很特别,他对数字比较感兴趣,他曾经一度沉迷于素数,而现在他对于一些新的特殊数比较有兴趣。
这些特殊数是这样的:这些数都能表示成M^K,M和K是正整数且K>1。
正当他再度沉迷的时候,他发现不知道什么时候才能知道这样的数字的数量,因此他又求助于你这位聪明的程序员,请你帮他用程序解决这个问题。
为了简化,问题是这样的:给你一个正整数N,确定在1到N之间有多少个可以表示成M^K(K>1)的数。

Input

本题有多组测试数据,每组包含一个整数N,1<=N<=1000000000000000000(10^18).

Output

对于每组输入,请输出在在1到N之间形式如M^K的数的总数。
每组输出占一行。

Sample Input

 

10

36

1000000000000000000

Sample Output

 

4

9

1001003332

大概题意是要你输出1到n中,能够表示成a^b的数,a,b都是大于0的整数的个数,
其中b大于1。
因为1到n中,能够完全开平方的个数就是(n^0.5)的整数部分,以此类推可以得到,完全开立方,完全开四次方各种的次数。这样的话,要枚举的数量太大,有什么办法可以让枚举的数量减少呢?有的,由于任意一个大于1的整数都可以表示成两个素的乘积,于是,能够完全开平方的个数包括了能够完全开四次方,八次方,十六次方以此类推的个数。于是,可以知道,只需要枚举能够完全开素数次方的个数即可。又因为n最大不会超过10^18,由于64位整型号能够表示的最大数大概就是9*10^18多,所以不需要特地写个大数。又因为这样,所以素数只需要枚举到大小不超过63即可,因为2^63-1就是64位整型的最大值,所以这个n最大,开个63次方的整数部分结果肯定为1,为1的话就代表能够1到n中能够完全开这个次方的数只有1个,又因为1能够开任意次方,所以,这个数肯定是1啦,于是超过63的素数没必要枚举了,因为只有1能够开这么多次方。对于一个数n,从小到大枚举到使n开次方为1即可,再把前面所有开次方的结果都累加,再除去之中重复的部分,最终结果就是题意所要求的个数。

重复的部分是说,能够完全开六次方的肯定也能够完全开二次方和三次方,这个能完全开六次方的个数被重复加了一次,所以要减去一次,以此类推把所有重复的部分除去即可。

还有一点,这个题目,有的人用long long读入n的时候,会wa,这个的话,是各种编译器的原因,用cin读入就好了,至于有的人说缺失精度什么的,只是想多了。


#include<iostream>
#include<cmath>
using namespace std;
int prime[]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61};
void result(long long x)
{int i,j,k;long long tmp,ans=1;for(i=0;;i++){tmp=(long long)(pow(x,1.0/prime[i]));if(tmp<2)break;ans+=tmp-1;for(j=i+1;;j++){tmp=(long long)(pow(x,1.0/(prime[i]*prime[j])));if(tmp<2)break;ans-=tmp-1;for(k=j+1;;k++){tmp=(long long)(pow(x,1.0/(prime[i]*prime[j]*prime[k])));if(tmp<2)break;ans+=tmp-1;}}}printf("%lld\n",ans);
}
int main()
{long long x;while(cin>>x)result(x);
}

hdu-2204(容斥原理)相关推荐

  1. hdu 2204 容斥原理

    点击打开链接 以下为参考大牛http://blog.csdn.net/acm_cxlove/article/details/7873776 题目:求出1-N里面能表示 成M^K的数有多少个 求A^B在 ...

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

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

  3. 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 ...

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

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

  5. HDU 5514 容斥原理

    题意 传送门 HDU 5514 题解 对于青蛙 iii,每一步即在模 mmm 意义上增加 aia_iai​,那么当青蛙走回起点 000 时,有 ai×step=0modma_i\times step= ...

  6. hdu 5213(容斥原理+莫队算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5213 莫队算法是离线处理一类区间不修改查询类问题的算法.就是如果你知道了[L,R]的答案.你可以在O( ...

  7. HDU - 1796——容斥原理+二进制枚举

    [题目描述] Now you get a number N, and a M-integers set, you should find out how many integers which are ...

  8. Eddy's爱好 HDU - 2204

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

  9. 信息学竞赛中的数学知识 --- 容斥原理

    C++基础数论-----容斥原理 C++基础数论-----容斥原理_C2020lax的博客-CSDN博客_容斥原理c++ C++数论容斥原理----无关的元素 C++数论容斥原理----无关的元素 - ...

  10. ACM组合数学题目列表

    基本组合计数 HDU 1028 Ignatius and the Princess III 整数划分 HIT 1402 整数划分问题 多种整数划分 置换群 PKU 2369 求置换的周期 1026 求 ...

最新文章

  1. scapy windows install
  2. Android第三十三天
  3. svn Error:Wrong committed revision number: -1。
  4. mysql ddl dql_mysql DDL、DML、DCL、DQL区分
  5. 搞生物的速看!有了它,30分钟可以把一天的工作都给干完!
  6. Scala开发教程(16): 没有“break”和“continue”的日子
  7. pku 2186 Popular Cows (tarjan缩点)
  8. JAVA实现IDcard身份证自动识别
  9. python多变量相关性分析_两个变量与因变量相关性分析_spss多变量相关性分析
  10. 将TXT文件作为数据库批量生成条形码
  11. 【实现方案】拼夕夕订单超时未支付自动关闭!
  12. MacBook 谷歌插件打包
  13. [Telink泰凌微825x]硬件开发环境搭建(一)
  14. python 如何安装numpy库?
  15. pymssql 安装和使用
  16. KAD emule
  17. DM3730 上实现WM6
  18. 吉他弹唱精通——逆向思维玩套路
  19. HEC-RAS、HEC-HMS、HEC-GeoRAS之间是什么关系?
  20. win7天翼live

热门文章

  1. spring boot 表单的实体提交错误:Validation failed for object='book'. Error count: 2
  2. 获取SQL Server数据库表的列名
  3. 百度地图api应用程序大赛作品
  4. 浅谈Python和VC中的编码问题(转)
  5. c++中的explicit关键字
  6. 解决 GStreamer 遇到了常规流错误问题
  7. ORACLE数据库表空间备份方案
  8. ubuntu14.04环境下spyder的安装
  9. Anaconda:conda install packages error 详解channel 设置
  10. 浅谈 Python 程序和 C 程序的整合