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. asList和subList的缺陷

    概述 在开发中我们经常使用asList去把一个数组转换为List.也存在通过subList.subMap.来对List.Map.Set来进行类似使用subString方法来对String对象进行分割处 ...

  2. 关于前端项目cookie的获取

    最近项目在做切换,2.0要升级到3.0,遇到跨域问题,使用的是nginx 进行对端口拦截请求其他地址,另外有的服务还要登录权限,之前没看到有这个,后来加上获取cookie的请求 var v3_toke ...

  3. IE 跨域设置

    开发的时候会发现IE下跨域无法访问,报错: Failed to load resource: net::ERR_CONNECTION_REFUSED 解决方法有两种: 自己写代理服务,访问代理服务,代 ...

  4. 从ApacheTomcat架构谈面试到源码编译环境v10.0.12

    概述 开启博客分享已近三个月,感谢所有花时间精力和小编一路学习和成长的伙伴们,有你们的支持,我们继续再接再厉 **本人博客网站 **IT小神 www.itxiaoshen.com 定义 Tomcat官 ...

  5. 关于AnnotationHub的一些应用

    AnnotationHub是一个包含大量注释信息的数据库,里面有很多物种,以及来源于很多数据库的注释信息. 1,安装这个包 source("https://bioconductor.org/ ...

  6. 66-Reorder List

    Reorder List My Submissions QuestionEditorial Solution Total Accepted: 64392 Total Submissions: 2818 ...

  7. Linux—yum的python版本错误——初级解决方案

    为了安装rrdtool,发现不是少这个就是少那个,最后发现yum也不能用. 从网上找的解决yum问题. 转自:http://doarthon.blog.51cto.com/3175384/728809 ...

  8. LearnPython_week3

    函数说明 1 # -*- coding:utf-8 -*- 2 # Author:Wong Du 3 4 5 ###函数, 6 # 能避免代码重复, 7 # 方便代码修改等操作 8 def wong( ...

  9. kubernetes整个基础环境的准备

    1.三台centos7,用CentOS-7-x86_64-Minimal-1708.iso安装的,记得统一选好时区,这三台会有etcd集群,其中一台做kubernetes服务端(也可以做三台服务端做负 ...

  10. flask分页功能:基于flask-sqlalchemy和jinja2

    先看源码: @app.route('/movie', methods=['GET', 'POST']) @app.route('/home', methods=['GET', 'POST']) @ap ...