码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces 955C Sad powers (数论)

时间:2018-07-13 17:39:23      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:clear   void   max   span   inf   vector   include   contest   type   

题目链接: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 }

 

Codeforces 955C Sad powers (数论)

标签:clear   void   max   span   inf   vector   include   contest   type   

原文地址:https://www.cnblogs.com/doggod/p/9305905.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!