题意

求[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(容斥原理)相关推荐

  1. HDU 6034 - Balala Power! | 2017 Multi-University Training Contest 1

    /* HDU 6034 - Balala Power! [ 大数进位,贪心 ] 题意:给一组字符串(小写英文字母),将上面的字符串考虑成26进制数,每个字母分配一个权值,问这组数字加起来的和最大是多少 ...

  2. Integer’s Power HDU - 3208(容斥原理)

    找出(l,r)内的所有的指数最大的次方和 因为一个数可能可以看成a^b和c^d,所以我需要去重,从后往前枚举幂数,然后找可以整除的部分,把低次幂的数去掉. 然后开n方的部分,先用pow()函数找到最接 ...

  3. hdu 4366 Card Collector (容斥原理)

    http://acm.hdu.edu.cn/showproblem.php?pid=4336 题意:有 n 张卡片 ,每张卡片出现的 概率 是 pi 每包至多有 一张卡片 ,也有可能没有 卡片 . 求 ...

  4. hdu (欧拉函数+容斥原理) GCD

    题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1695 看了别人的方法才会做 参考博客http://blog.csdn.net/shiren_Bod/ar ...

  5. A - Character Encoding HDU - 6397 - 方程整数解-容斥原理

    A - Character Encoding HDU - 6397 思路 : 隔板法就是在n个元素间的(n-1)个空中插入k-1个板,可以把n个元素分成k组的方法 普通隔板法  求方程 x+y+z=1 ...

  6. Hdu 3929 Big Coefficients (容斥原理 二项式性质)

    二项式定理有两个性质,这题只用到第一个. 性质1:若k表示把n转为二进制后所有位中1的个数,则(1 + x) ^ n中系数为奇数的个数为2 ^ k. 性质2:(1 + x) ^ n中的系数中 所有奇系 ...

  7. HDU 6034 Balala Power!

    题目内容 题意:就是给a~z之间的每个字母1个0~25之间的数,即为每个字母的权重(权重的分配依据于每个字母所做的贡献),相当于26进制数.求使所有字符串之和最大的值是多少? 贪心,将所有字母按照所做 ...

  8. HDU - 4461 The Power of Xiangqi

    题目链接 题意 给你两个人的象棋棋子,每个棋子对应一个防御值,如果一个人跑和马不全的话防御值减1.计算那个人的防御最高. AC #include <iostream> #include & ...

  9. HDU 4336 Card Collector(容斥原理+状态压缩)

    题目连接 多校的题目,和网络赛那个多么的相似啊...枚举每个状态 含有奇数的期望-偶数卡的期望,就是最后的结果. 1 #include <iostream> 2 #include < ...

最新文章

  1. Nginx学习2:Nginx的安装配置和常用命令
  2. 蓝桥杯-送分啦(java)
  3. 《简明 Python 教程》笔记
  4. 学生管理系统stuSystem函数
  5. 常见的两个面试题以及面试的心态
  6. 注意啦,Struts 2.1.6跟sitemesh-2.4.1不兼容
  7. idea中push到github或gitee过程中的常见错误记录
  8. [转载] 嵌入式文件系统
  9. Java通过JNI调用C++的DLL库
  10. 如何截取QQ密码和聊天内容、去掉QQ广告栏、添加QQ尾巴
  11. SQL中常用日期函数
  12. wxParse无法解析strong标签
  13. html ico在线制作,10款免费图标生成器网页设计师
  14. Photoshop制作banner步骤过程
  15. envi精度评定_envi分类精度评价操作步骤
  16. Linux命令:configure --prefix=/ 有什么作用
  17. C51单片机教程之工程建立
  18. 高级计算机网络教程,计算机网络高级教程
  19. 《教练型管理者》读书笔记-第3篇 【教练流程】
  20. 如何找到脑电中眼电伪迹/EEG伪迹寻找/eeglab使用

热门文章

  1. java面向过程编程怎么写_从面向过程到面向对象,我的编程之路
  2. php+redis+设置前缀,spring使用Redis自定义前缀后缀名(去掉SimpleKey []+自定义)
  3. 比较两个表格的不同_两表数据的核对,WPS表格似乎更加方便容易
  4. 移动web开发之rem布局(rem基础、媒体查询、 less 基础、rem适配方案)
  5. LeetCode 2049. 统计最高分的节点数目(DFS)
  6. LeetCode 668. 乘法表中第k小的数(二分查找)
  7. LeetCode 1176. 健身计划评估(滑动窗口)
  8. LeetCode 747. 至少是其他数字两倍的最大数
  9. LeetCode 1160. 拼写单词
  10. LeetCode 654. 最大二叉树(递归)