找出(l,r)内的所有的指数最大的次方和

因为一个数可能可以看成a^b和c^d,所以我需要去重,从后往前枚举幂数,然后找可以整除的部分,把低次幂的数去掉。

然后开n方的部分,先用pow()函数找到最接近答案的数,但是会丢失精度,然后在这个数的附近寻找最接近答案的整数,用快速幂在乘n次幂回去,看最接近原本数的是哪一个。

  1. #include<map>
  2. #include<set>
  3. #include<ctime>
  4. #include<cmath>
  5. #include<stack>
  6. #include<queue>
  7. #include<string>
  8. #include<vector>
  9. #include<cstdio>
  10. #include<cstdlib>
  11. #include<cstring>
  12. #include<iostream>
  13. #include<algorithm>
  14. #define lowbit(x) (x & (-x))
  15.  
  16. typedef unsigned long long int ull;
  17. typedef long long int ll;
  18. const double pi = 4.0*atan(1.0);
  19. const int inf = 0x3f3f3f3f;
  20. const int maxn = ;
  21. const int maxm = ;
  22. const int mod = ;
  23. const double eps = 1e-;
  24. using namespace std;
  25.  
  26. ll n, m;
  27. int T, tol;
  28. ll num[];
  29. ll INF = 1e18;
  30.  
  31. ll qpow(ll a, ll b) {
  32. ll ans = ;
  33. while(b) {
  34. if(b&) {
  35. double tmp = 1.0 * INF / ans;
  36. if(a > tmp) return -;
  37. ans = ans * a;
  38. }
  39. b >>= ;
  40. if(a > ((ll)<<) && b) return -;
  41. a = a*a;
  42. }
  43. return ans;
  44. }
  45.  
  46. ll calc(ll x, int pos) {
  47. ll a = (ll)pow((double)x, 1.0/pos);
  48. ll ansl = qpow(a-, pos);
  49. ll ansm = qpow(a, pos);
  50. ll ansr = qpow(a+, pos);
  51. if(ansr != - && ansr <= x) return a+;
  52. if(ansm != - && ansm <= x) return a;
  53. return a-;
  54. }
  55.  
  56. ll solve(ll x) {
  57. memset(num, , sizeof num);
  58. num[] = x;
  59. int pos = ;
  60. for(; pos <= ; pos++) {
  61. ll tmp = calc(x, pos) - ;
  62. if(tmp <= ) break;
  63. num[pos] = tmp;
  64. }
  65. pos--;
  66. for(int i=pos; i>=; i--) {
  67. for(int j=; i*j<=pos; j++) {
  68. num[i] -= num[i*j];
  69. }
  70. }
  71. //for(int i=1; i<=pos; i++) printf("%I64d%c", num[i], i==pos ? '\n' : ' ');
  72. ll ans = ;
  73. for(int i=; i<=pos; i++) ans += i * num[i];
  74. return ans;
  75. }
  76.  
  77. int main() {
  78. while(scanf("%I64d%I64d", &n, &m), n||m) {
  79. ll ans = solve(m);
  80. ans -= solve(n-);
  81. printf("%I64d\n", ans);
  82. }
  83. return ;
  84. }

Integer’s Power HDU - 3208(容斥原理)的更多相关文章

  1. HDU 3208 Integer’s Power

    Integer’s Power Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Origina ...

  2. hdu 3208 Integer’s Power 筛法

    Integer’s Power Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  3. GCD HDU - 1695 容斥原理(复杂度低的版本)

    题意: 让你从区间[a,b]里面找一个数x,在区间[c,d]里面找一个数y.题目上已经设定a=b=1了.问你能找到多少对GCD(x,y)=k.x=5,y=7和y=5,x=7是同一对 题解: 弄了半天才 ...

  4. - Visible Trees HDU - 2841 容斥原理

    题意: 给你一个n*m的矩形,在1到m行,和1到n列上都有一棵树,问你站在(0,0)位置能看到多少棵树 题解: 用(x,y)表示某棵树的位置,那么只要x与y互质,那么这棵树就能被看到.不互质的话说明前 ...

  5. HDU Integer's Power(容斥原理)

    题意 求[l,r]的最大指数和(1<=l,r<=10^18) 最大指数和(如64=8^2=4^3=2^6,所以64的最大指数和是6) 题解 很明显我们可以先求出[1,n]的最大指数和,然后 ...

  6. 【HDOJ】3208 Integer’s Power

    1. 题目描述定义如下函数$f(x)$:对于任意整数$y$,找到满足$x^k = y$同时$x$最小并的$k$值.所求为区间$[a, b]$的数代入$f$的累加和,即\[\sum_{x=a}^{b} ...

  7. HDU 4059 容斥原理+快速幂+逆元

    E - The Boss on Mars Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64 ...

  8. HDU 1796 容斥原理

    How many integers can you find Time Limit: 12000/5000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  9. HDU 1796 容斥原理 How many integers can you find

    题目连接   http://acm.hdu.edu.cn/showproblem.php?pid=1796 处男容斥原理  纪念一下  TMD看了好久才明白DFS... 先贴代码后解释 #includ ...

随机推荐

  1. Linux kernel support docker storage driver aufs

    How to make docker use aufs in CentOS 7? - Server Faulthttps://serverfault.com/questions/650208/how- ...

  2. react-router的坑

    componentWillReceiveProps(nextProps){ 在改钩子函数里接受组件变化的最近的传递的props 如果在这里没有使用nextprops 而是调用this.props 会出 ...

  3. asp.net core前后端分离

    陆陆续续的看了两个礼拜的前端知识,把vue+vue-router+axios的知识撸了一遍,本来想加个element-ui来实现一下前后端分离,实施的时候却遇到了很多的坑.我本身不在一个软件开发公司上 ...

  4. mysql异常:Packet for query is too large (10240 > 1024). You can change this value

    出现这个问题的原因是:mysql的配置文件中 max_allowed_packet 设置过小,mysql根据配置文件会限制server接受的数据包大小. 还有人会说我操作的数据量明显没有超过这个值为啥 ...

  5. 【Java编译】含package的类文件编译

    含package的类文件编译: package com.zhangxueliang.setdemo; public class Demo1 { public static void main(Stri ...

  6. Oracle创建表sql语句

    create table t_owners ( id number primary key, name ), addressid number, housenumber ), watermeter ) ...

  7. WPF实现滚动显示的TextBlock

    在我们使用TextBlock进行数据显示时,经常会遇到这样一种情况就是TextBlock的文字内容太多,如果全部显示的话会占据大量的界面,这是我们就会只让其显示一部分,另外的一部分就让其随着时间的推移 ...

  8. bpmn.js & BPMN diagram

    bpmn.js & BPMN diagram BPMN 2.0 for the web https://github.com/bpmn-io/bpmn-js https://demo.bpmn ...

  9. pip 升级

    pip install --upgrade qrcode pip install --upgrade qrcode==5.3

  10. 一、使用Navicat连接阿里云服务器宝塔面板里创建的数据库

    一.数据库配置连接  (通过新增用户的方式)