zoukankan      html  css  js  c++  java
  • Codeforces 955C Sad powers (数论)

    题目链接:Sad powers

    题意:给出n个l和r,求出每个给出的[l,r]之间的可以使是另外一个数的k次方的数。(k>=2)

    题解:题目给出的数据范围最大是1E18所以如果要直接把所有的从1-1E18的满足条件的数存下来的话一定会超时,但是我们可以注意到1e6^3 = 1e18,所以我们可以先把指数大于3的满足条件的数存下来,指数为2的分开来算(这里要把是别的数平方的数去掉,为了在后面算指数为2的数的时候更方便)。在算指数为2的数的时候要注意不可以用floor(sqrt(x))这种方法来取整,floor之后的数是double精度不够,对于大整数取整时一定要用自己的二分函数去求!

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int MAX_N = 1e5+9;
     4 const long long INF = 1e18+9;
     5 typedef long long ll;
     6 int N,M,T,S;
     7 vector<long long> vec;
     8 void init()
     9 {
    10     vec.clear();
    11     for(long long t = 2;t<=1e6;t++){
    12         int x = floor(sqrt(t));
    13         if(x*x == t) continue;
    14         long long tt = t*t*t;
    15         while(tt <= INF){
    16             vec.push_back(tt);
    17             if(INF/tt >= t*t) tt *= t*t;
    18             else break;
    19         }
    20     }
    21     sort(vec.begin(),vec.end());
    22     vec.erase(unique(vec.begin(), vec.end()), vec.end());
    23 }
    24 long long my_sq(long long x){
    25     long long l =1 , r = 1e9;
    26     while(l<=r){
    27         long long mid = (l+r) / 2;
    28         if(mid * mid <= x) l = mid +1 ;
    29         else r = mid - 1;
    30     }
    31     return l;
    32 }
    33 int main()
    34 {
    35     init();
    36     while(cin>>N)
    37     {
    38        long long l , r;
    39        for(int i=0;i<N;i++){
    40             scanf("%lld%lld",&l,&r);
    41             int pos1 = lower_bound(vec.begin(),vec.end(),l) - vec.begin();
    42             int pos2 = upper_bound(vec.begin(),vec.end(),r) - vec.begin();
    43             long long ans1 = pos2 - pos1 ;
    44             long long ans2 = my_sq(r) - my_sq(l-1);
    45             cout<<ans1+ans2<<endl;
    46        }
    47     }
    48     return 0;
    49 }
  • 相关阅读:
    redis之windows安装
    ubuntu安装 ssh
    less乱码ESC显示问题
    linux 命令/目录 名称 英文单词 缩写 助记
    设计模式-策略模式
    设计模式-责任链模式
    ApplicationContexAware的作用
    ApplicationEvent事件机制
    mybatis注解版延迟加载、立即加载、一级缓存、二级缓存
    mybatis xml版延迟加载、立即加载、一级缓存、二级缓存
  • 原文地址:https://www.cnblogs.com/doggod/p/9305905.html
Copyright © 2011-2022 走看看