HDU 2204 Eddy's 爱好 (容斥原理)
<题目链接>
题目大意:
Ignatius 喜欢收集蝴蝶标本和邮票,但是Eddy的爱好很特别,他对数字比较感兴趣,他曾经一度沉迷于素数,而现在他对于一些新的特殊数比较有兴趣。
这些特殊数是这样的:这些数都能表示成M^K,M和K是正整数且K>1。
正当他再度沉迷的时候,他发现不知道什么时候才能知道这样的数字的数量,因此他又求助于你这位聪明的程序员,请你帮他用程序解决这个问题。
为了简化,问题是这样的:给你一个正整数N,确定在1到N之间有多少个可以表示成M^K(K>1)的数。
解题分析:
解决本题需要先知道一个结论:在一个区间[1,n]中,能被开平方的数一共有 个。同理,在区间[1,n]中,能被开立方的数一共有
个.....更一般的,能够被开k次方的数一共会有
个数。
因为$k$是幂数,所以$k$在本题的范围很小,考虑枚举$k$。对于$k$,假设$k$是合数,那么k一定能够被分解为若干个质数相乘的形式,而这些质数在前面枚举的时候就会被考虑到,所以我们只需要枚举k为质数的情况。而即使是2作为底数,$2^{60}$就已经大于$10^{18}$,所以我们只需要考虑k为小于60的质数的情况。
k为所有质数的情况中,有一些情况会被重复计算,这个时候就需要用到容斥原理了。因为2*3*5>60,所以我们只需要考虑3个质数相互组合容斥的情况。
#include <bits/stdc++.h>
using namespace std; #define rep(i,s,t) for(int i=s;i<=t;i++)
typedef long long ll; const int prime[]={ ,,,,,,,,,,,,,,,, };
ll n; inline ll solve(ll k){ //利用结论计算这个区间内能被开(1/k)次方的数的个数(1除外)
return pow(n,1.0/k)-;
} int main(){
while(cin>>n){
ll ans1=,ans2=,ans3=;
rep(i,,)ans1+=solve(prime[i]);
rep(i,,) rep(j,i+,){
ans2+=solve(prime[i]*prime[j]);
}
rep(i,,) rep(j,i+,) rep(k,j+,){
ans3+=solve(prime[i]*prime[j]*prime[k]);
}
cout<<ans1+ans3-ans2+<<endl;
}
}
HDU 2204 Eddy's 爱好 (容斥原理)的更多相关文章
- hdu 2204 Eddy's爱好 容斥原理
Eddy's爱好 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem ...
- HDU 2204 Eddy's爱好(容斥原理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2204 解题报告:输入一个n让你求出[1,n]范围内有多少个数可以表示成形如m^k的样子. 不详细说了, ...
- HDU 2204 Eddy's爱好(容斥原理dfs写法)题解
题意:定义如果一个数能表示为M^k,那么这个数是好数,问你1~n有几个好数. 思路:如果k是合数,显然会有重复,比如a^(b*c) == (a^b)^c,那么我们打个素数表,指数只枚举素数,2^60 ...
- hdu 2204 Eddy's爱好
// 一个整数N,1<=N<=1000000000000000000(10^18).// 输出在在1到N之间形式如M^K的数的总数// 容斥原理// 枚举k=集合{2,3,5,7,11,1 ...
- HDU - 2204 Eddy's爱好 (数论+容斥)
题意:求\(1 - N(1\le N \le 1e18)\)中,能表示成\(M^k(M>0,k>1)\)的数的个数 分析:正整数p可以表示成\(p = m^k = m^{r*k'}\)的形 ...
- hdoj 2204 Eddy's爱好
原文链接:http://www.cnblogs.com/DrunBee/archive/2012/09/05/2672546.html 题意:给你一个正整数N,确定在1到N之间有多少个可以表示成M^K ...
- HDU 2204Eddy's爱好(容斥原理)
Eddy's爱好 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Sta ...
- hdu2204 Eddy's爱好 打表+容斥原理
Ignatius 喜欢收集蝴蝶标本和邮票,但是Eddy的爱好很特别,他对数字比较感兴趣,他曾经一度沉迷于素数,而现在他对于一些新的特殊数比较有兴趣.这些特殊数是这样的:这些数都能表示成M^K,M和K是 ...
- Hdu2204 Eddy's爱好 2017-06-27 16:11 43人阅读 评论(0) 收藏
Eddy's爱好 Time Limit : 3000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Subm ...
随机推荐
- Eclipse——如何设置代码字体大小
eclipse默认字体太小,1920*1080下分辨不清楚,接下来介绍一下如何更改默认字体大小: 1.window-Preferences 2.General-Appearance-Colors an ...
- JAVA开发环境搭建(Mac)
1. 打开Terminal, 执行命令: java -version 即可查看到我们所安装的jdk版本. 2.安装jdk成功之后,我们还需要配置jdk环境变量. 使用命令: /usr/libexec/ ...
- Spring ElasticsearchTemplate 经纬度按距离排序
es实体,用 @GeoPointField 注解,值为:中间逗号隔开,如 29.477000,119.278536(经度, 维度) @Document(indexName = "v_inte ...
- 20155324《网络对抗》Exp06 信息搜集与漏洞扫描
20155324<网络对抗>Exp06 信息搜集与漏洞扫描 实践内容 各种搜索技巧的应用 DNS IP注册信息的查询 基本的扫描技术:主机发现.端口扫描.OS及服务版本探测.具体服务的查点 ...
- 推荐.Net、C# 逆向反编译四大工具利器
转自:https://blog.csdn.net/kongwei521/article/details/54927689 在项目开发过程中,估计也有人和我遇到过同样的经历:运行环境出现了重大Bug亟需 ...
- docker安装mysql5.7
查看镜像 docker search mysql 拉取镜像 docker pull mysql:5.7 运行镜像 docker run --name mysql -p 3306:3306 -e MYS ...
- Jmeter、Postman 、 loadrunner SoapUI 接口测试工具
一. loadrunner 简称 LR 二. Jmeter 1.安装包:apache-jmeter-4.0.tgz 解压.学会此工具的使用 和POSTman 一样的. 2.本机测试:双击apa ...
- DoraBox 漏洞练习平台
项目地址: https://github.com/gh0stkey/DoraBox SQL注入 SQLi 数字型 判断表中有多少列 http://127.0.0.1/DoraBox/sql_inje ...
- 生成唯一UUID
目前有多种方式生成的UUID,根据算法,可确定是否唯一,使用IP和MAC自定义生成唯一主键较妥: // 获取MAC地址的方法 private static String getMACAddress(I ...
- 命名空间的using声明
using声明具有如下的形式: using namespace::name; 一旦声明了上述语句,就可以直接访问命名空间中的名字: #include<iostream> //using声明 ...