HDU Integer's Power(容斥原理)
题意
求[l,r]的最大指数和(1<=l,r<=10^18)
最大指数和(如64=8^2=4^3=2^6,所以64的最大指数和是6)
题解
很明显我们可以先求出[1,n]的最大指数和,然后再作差。
我们可以先求出num[i]代表[1,n]中最大指数为i的数有多少个。
然后枚举全部的i,然后让答案加上i*num[i];
那么怎么求num[i]呢
我们可以求出[1,n]中指数为x的数有多少个作为num[x]的初步值。这个用n1/x就可以求出(不过要注意精度问题,及其恶心,看代码吧)
然后这个num却对是不对的。我们发现16=4^2=2^4,num[2]中却有16,所以我们用num[2]-num[4]就行了。
我们发现对于每一对i>j且i%j==0num[j]都需要减num[i],不过我们要倒序枚举j。
具体看代码吧。
1 #include<iostream> 2 #include<cmath> 3 #include<cstdio> 4 #include<algorithm> 5 #include<cstring> 6 using namespace std; 7 const long long INF=1e18+1; 8 const long long inf=(long long)1<<31; 9 long long dp[100],a,b,n; 10 long long ksm(long long x,long long b){ 11 long long tmp=1; 12 while(b){ 13 if(b&1){ 14 double num=1.0*INF/tmp; 15 if(x>num)return -1; 16 tmp=tmp*x; 17 } 18 b>>=1; 19 if(x>inf&&b>0)return -1; 20 x=x*x; 21 } 22 return tmp; 23 } 24 long long calc(long long n,long long x){ 25 long long a=(long long)(pow((double)(n),1.0/x)+1e-9); 26 long long b=ksm(a,x); 27 if(b==n)return a; 28 if(b==-1||b>n)return a-1; 29 long long c=ksm(a+1,x); 30 if(c!=-1&&c<=n)return a+1; 31 else return a; 32 } 33 long long solve(long long x){ 34 if(x==0)return 0; 35 if(x==1)return 1; 36 long long k; 37 dp[1]=x; 38 for(long long i=2;i<=62;i++){ 39 dp[i]=calc(x,i)-1; 40 if(dp[i]==0){ 41 k=i-1; 42 break; 43 } 44 } 45 for(long long i=k;i>=1;i--) 46 for(long long j=1;j<i;j++){ 47 if(i%j==0)dp[j]-=dp[i]; 48 } 49 long long ans=dp[1]; 50 for(long long i=2;i<=k;i++){ 51 ans+=dp[i]*i; 52 } 53 return ans; 54 } 55 int main(){ 56 while(scanf("%lld%lld",&a,&b)!=EOF){ 57 if(a==0&&b==0)break; 58 printf("%lld\n",solve(b)-solve(a-1)); 59 } 60 return 0; 61 }
转载于:https://www.cnblogs.com/Xu-daxia/p/9715416.html
HDU Integer's Power(容斥原理)相关推荐
- HDU 6034 - Balala Power! | 2017 Multi-University Training Contest 1
/* HDU 6034 - Balala Power! [ 大数进位,贪心 ] 题意:给一组字符串(小写英文字母),将上面的字符串考虑成26进制数,每个字母分配一个权值,问这组数字加起来的和最大是多少 ...
- Integer’s Power HDU - 3208(容斥原理)
找出(l,r)内的所有的指数最大的次方和 因为一个数可能可以看成a^b和c^d,所以我需要去重,从后往前枚举幂数,然后找可以整除的部分,把低次幂的数去掉. 然后开n方的部分,先用pow()函数找到最接 ...
- hdu 4366 Card Collector (容斥原理)
http://acm.hdu.edu.cn/showproblem.php?pid=4336 题意:有 n 张卡片 ,每张卡片出现的 概率 是 pi 每包至多有 一张卡片 ,也有可能没有 卡片 . 求 ...
- hdu (欧拉函数+容斥原理) GCD
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1695 看了别人的方法才会做 参考博客http://blog.csdn.net/shiren_Bod/ar ...
- A - Character Encoding HDU - 6397 - 方程整数解-容斥原理
A - Character Encoding HDU - 6397 思路 : 隔板法就是在n个元素间的(n-1)个空中插入k-1个板,可以把n个元素分成k组的方法 普通隔板法 求方程 x+y+z=1 ...
- Hdu 3929 Big Coefficients (容斥原理 二项式性质)
二项式定理有两个性质,这题只用到第一个. 性质1:若k表示把n转为二进制后所有位中1的个数,则(1 + x) ^ n中系数为奇数的个数为2 ^ k. 性质2:(1 + x) ^ n中的系数中 所有奇系 ...
- HDU 6034 Balala Power!
题目内容 题意:就是给a~z之间的每个字母1个0~25之间的数,即为每个字母的权重(权重的分配依据于每个字母所做的贡献),相当于26进制数.求使所有字符串之和最大的值是多少? 贪心,将所有字母按照所做 ...
- HDU - 4461 The Power of Xiangqi
题目链接 题意 给你两个人的象棋棋子,每个棋子对应一个防御值,如果一个人跑和马不全的话防御值减1.计算那个人的防御最高. AC #include <iostream> #include & ...
- HDU 4336 Card Collector(容斥原理+状态压缩)
题目连接 多校的题目,和网络赛那个多么的相似啊...枚举每个状态 含有奇数的期望-偶数卡的期望,就是最后的结果. 1 #include <iostream> 2 #include < ...
最新文章
- Nginx学习2:Nginx的安装配置和常用命令
- 蓝桥杯-送分啦(java)
- 《简明 Python 教程》笔记
- 学生管理系统stuSystem函数
- 常见的两个面试题以及面试的心态
- 注意啦,Struts 2.1.6跟sitemesh-2.4.1不兼容
- idea中push到github或gitee过程中的常见错误记录
- [转载] 嵌入式文件系统
- Java通过JNI调用C++的DLL库
- 如何截取QQ密码和聊天内容、去掉QQ广告栏、添加QQ尾巴
- SQL中常用日期函数
- wxParse无法解析strong标签
- html ico在线制作,10款免费图标生成器网页设计师
- Photoshop制作banner步骤过程
- envi精度评定_envi分类精度评价操作步骤
- Linux命令:configure --prefix=/ 有什么作用
- C51单片机教程之工程建立
- 高级计算机网络教程,计算机网络高级教程
- 《教练型管理者》读书笔记-第3篇 【教练流程】
- 如何找到脑电中眼电伪迹/EEG伪迹寻找/eeglab使用
热门文章
- java面向过程编程怎么写_从面向过程到面向对象,我的编程之路
- php+redis+设置前缀,spring使用Redis自定义前缀后缀名(去掉SimpleKey []+自定义)
- 比较两个表格的不同_两表数据的核对,WPS表格似乎更加方便容易
- 移动web开发之rem布局(rem基础、媒体查询、 less 基础、rem适配方案)
- LeetCode 2049. 统计最高分的节点数目(DFS)
- LeetCode 668. 乘法表中第k小的数(二分查找)
- LeetCode 1176. 健身计划评估(滑动窗口)
- LeetCode 747. 至少是其他数字两倍的最大数
- LeetCode 1160. 拼写单词
- LeetCode 654. 最大二叉树(递归)