Content

给你 \(q\) 个询问,每次询问 \([l,r]\) 这个区间内满足 \(x=a^p(a>0,p>1)\) 的 \(x\) 的数量。

数据范围:\(1\leqslant q\leqslant 10^5\),\(1\leqslant l\leqslant r\leqslant 10^{18}\)。

Solution

第一次自己独立做出了紫题,特此发篇题解纪念一下。

首先,我们看到数据范围是 \(10^{18}\) 级别的,看到次幂,然后联想到 \(\sqrt{10^{18}}=10^9\),\(\sqrt[3]{10^{18}}=10^6\)。然后我们发现,如果 \(p\geqslant 3\) 的话,貌似可以直接预处理出所有的满足题目要求的 \(x\),询问时直接二分其位置即可。至于 \(p=2\) 的情况(事实上就是完全平方数),由于 \(x\) 以内的完全平方数个数为 \(\sqrt{x}\),因此利用类似前缀和的思想就可以求出这一部分的答案为 \(\sqrt{r}-\sqrt{l-1}\)。两个部分综合在一起即可求出答案。

具体实现的时候要注意答案的边界问题以及直接开根带来的精度问题。

Code

请注意,以下代码仅可在 C++14 语言下通过。原因可能是 sqrt 容易掉精度。

namespace Solution {
const int N = 3e6 + 7;
const ll MX = 1e18;
int q, cnt;
ll l, r, num[N]; ill solve(ll x) {
ll idx = lower_bound(num + 1, num + cnt + 1, x) - num;
if((idx <= cnt && num[idx] > x) || idx > cnt) idx--;
return idx + (ll)sqrt(x);
} iv Main() {
F(ll, i, 2, 1000000) {
long long k = i * i;
for(; k <= MX / i; ) {
k *= i;
ll sqrtk = sqrt(k);
if(sqrtk * sqrtk != k) num[++cnt] = k;
}
}
sort(num + 1, num + cnt + 1), cnt = unique(num + 1, num + cnt + 1) - num - 1;
read(q); while(q--) read(l, r), print(solve(r) - solve(l - 1), '\n');
return;
}
}

CF955C Sad powers 题解的更多相关文章

  1. Codeforces 955C Sad powers (数论)

    题目链接:Sad powers 题意:给出n个l和r,求出每个给出的[l,r]之间的可以使是另外一个数的k次方的数.(k>=2) 题解:题目给出的数据范围最大是1E18所以如果要直接把所有的从1 ...

  2. Codeforces 955C Sad powers(数论)

    Codeforces 955C Sad powers 题意 q组询问,每次询问给定L,R,求[L,R]区间内有多少个数可以写成ap的形式,其中a>0,p>1,1 ≤ L ≤ R ≤ 1e1 ...

  3. Codeforces Round #471 (Div. 2) C. Sad powers

    首先可以前缀和 ans = solve(R) - solve(L-1) 对于solve(x) 1-x当中符合条件的数 分两种情况 3,5,7,9次方的数,注意这地方不能含有平方次 平方数 #inclu ...

  4. codeforce 955c --Sad powers 思路+二分查找

    这一题的题意是   定义一个数,该数特点是为a的p次方 (a>0,p>1) 再给你n个询问,每个询问给出一个区间,求区间内该数的数目. 由于给出的询问数极大(10e5) 所以,容易想到应该 ...

  5. C. Sad powers

    You're given Q queries of the form (L, R). For each query you have to find the number of such x that ...

  6. Codeforces 955C - Sad powers(数论 + 二分)

    链接: http://codeforces.com/problemset/problem/955/C 题意: Q次询问(1≤Q≤1e5),每次询问给出两个整数L, R(1≤L≤R≤1e18),求所有符 ...

  7. CodeForce-955C

    C. Sad powerstime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutput ...

  8. [题解] CF622F The Sum of the k-th Powers

    CF622F The Sum of the k-th Powers 题意:给\(n\)和\(k\),让你求\(\sum\limits_{i = 1} ^ n i^k \ mod \ 10^9 + 7\ ...

  9. hdu2348题解

    又恬不知耻的开始写题解了,暑假到了,QAQ然而想我这样的弱逼是没有暑假的sad,还是老老实实刷题吧. 题目大意:给一个小车的宽度和长度和两条道路的宽度,判断小车能否通过. 思路:可以先看下面的图,我们 ...

随机推荐

  1. 从零开始学Kotlin第二课

    字符串模板 fun main(args:Array<String>){ //主函数main方法 println(diaryGenerater("天安门")); } // ...

  2. CF1578J Just Kingdom

    考虑一个点被填满则他需要从其父亲得到\(q_u = \sum_{v = u\ or\ v \in son_u}m_v\) 那么考虑如何这样操作. 我当时world final做的时候,是从上往下遍历, ...

  3. Codeforces 997D - Cycles in product(换根 dp)

    Codeforces 题面传送门 & 洛谷题面传送门 一种换根 dp 的做法. 首先碰到这类题目,我们很明显不能真的把图 \(G\) 建出来,因此我们需要观察一下图 \(G\) 有哪些性质.很 ...

  4. Small but Funny Tricks [Remember them all!]

    模数 1e9 的神奇求行列式: #include <bits/stdc++.h> using namespace std; const int maxn = 1e2, mod = 1e9; ...

  5. Matlab指针

    Matlab指针 第一印象貌似是Matlab中不存在指针,所有变量与函数的赋值都是按值传递的,不会对参数进行修改.其实Matlab提供了handle类作为指针代替品.只要我们利用handle子类,就可 ...

  6. 如何构建自己的KEGG数据库

    本文转自Y叔公众号 自己KEGG数据库好处: 可重复性好 没网也可以进行分析 步骤 1 在KEGG官网找到自己物种的3字符缩写 2 加载Y叔获取kegg.db 的R包 1 ##安装Y叔的包 2 lib ...

  7. dlang 安装

    刷论坛看到TIOBE排行榜,排名靠前的基本是C.C++.java.python之类的语言,常用的R语言近几年排名一路走高,前20基本变化不大. 后面发现第二十九位居然有个叫做D的语言,看了下和C语法很 ...

  8. 2 — springboot的原理

    1.初步探索:第一个原理:依赖管理 发现:这里面存放着各种jar包 和 版本号 这也是:我们在前面第一个springboot项目创建中勾选了那个web,然后springboot就自动帮我们导入很多东西 ...

  9. 使用Redis实现令牌桶算法

    在限流算法中有一种令牌桶算法,该算法可以应对短暂的突发流量,这对于现实环境中流量不怎么均匀的情况特别有用,不会频繁的触发限流,对调用方比较友好. 例如,当前限制10qps,大多数情况下不会超过此数量, ...

  10. 一文搞懂指标采集利器 Telegraf

    作者| 姜闻名 来源|尔达 Erda 公众号 ​ 导读:为了让大家更好的了解 MSP 中 APM 系统的设计实现,我们决定编写一个<详聊微服务观测>系列文章,深入 APM 系统的产品.架构 ...