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 }
  • 相关阅读:
    1014. 福尔摩斯的约会
    1009. 说反话
    1002. 写出这个数
    1031. 查验身份证
    1021. 个位数统计
    1006. 换个格式输出整数
    1058. A+B in Hogwarts
    1027. Colors in Mars
    1019. General Palindromic Number
    Windows 新装进阶操作指南
  • 原文地址:https://www.cnblogs.com/doggod/p/9305905.html
Copyright © 2011-2022 走看看