Codeforces 955C Sad powers (数论)

Posted doggod

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }

 

以上是关于Codeforces 955C Sad powers (数论)的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces 955C Sad powers(数论)

Codeforces 955C Sad powers (数论)

Codeforces Round #426 (Div. 2) C. The Meaningless Game (二分 or pow函数)

中值滤波+SAD匹配跟踪基于verilog编程开发的FPGA中值滤波和SAD模板匹配跟踪

摘要 SAD(绝对差和)的霓虹灯实现总线错误

OpenCV - Python 断言错误:SAD 算法 - 立体相机视差图计算