链接:

http://codeforces.com/problemset/problem/955/C

题意:

Q次询问(1≤Q≤1e5),每次询问给出两个整数L, R(1≤L≤R≤1e18),求所有符合条件的整数x的个数。
条件为:L≤x≤R,x = a的p次方(a, p为整数且a>0, p>1)。

分析:

一、当指数p=3时,底数a最多有1e6个,由于指数增加时底数收敛得很快,
所以我们可以将p>=3时的所有x放进vector里排序去重(预处理),求x的个数的时候二分查找即可。
二、对于p=2,也可以使用二分查找来得到x的个数。
这两种情况会有重复的x,所以要在预处理的时候把所有的平方数去掉。

代码:

 #include <cstdio>
#include <vector>
#include <algorithm>
using namespace std; typedef long long int LLI;
const LLI UP = 1e18;
vector<LLI> V; LLI root(LLI n) { // 二分查找n的平方根r(n <= r*r)
LLI L = , R = 1e9 + ;
while(L < R) {
LLI M = L + (R - L) / ;
if(M * M >= n) R = M;
else L = M + ;
}
return L;
} void constant() {
vector<LLI> V2 = {};
int u = 1e6;
for(int n = ; n <= u; n++) {
for(LLI i = 1LL * n * n * n; ; i *= n) {
V2.push_back(i);
if(i > UP / n) break; // 防止 long long 溢出
}
}
sort(V2.begin(), V2.end());
V2.erase(unique(V2.begin(), V2.end()), V2.end());
for(int i = ; i < V2.size(); i++) {
LLI r = root(V2[i]);
if(r * r != V2[i]) V.push_back(V2[i]);
}
} int main() {
constant(); // 预处理
int q;
LLI L, R;
scanf("%d", &q);
while(q--) {
scanf("%I64d%I64d", &L, &R);
LLI ans = upper_bound(V.begin(), V.end(), R)
- lower_bound(V.begin(), V.end(), L);
ans += root(R+) - root(L);
printf("%I64d\n", ans);
}
return ;
}

Codeforces 955C - 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. codeforce 955c --Sad powers 思路+二分查找

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

  4. [CodeForces - 1225C]p-binary 【数论】【二进制】

    [CodeForces - 1225C]p-binary [数论][二进制] 标签: 题解 codeforces题解 数论 题目描述 Time limit 2000 ms Memory limit 5 ...

  5. CodeForces 359D (数论+二分+ST算法)

    题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=47319 题目大意:给定一个序列,要求确定一个子序列,①使得该子序 ...

  6. codeforces 300E Empire Strikes Back 数论+二分查找

    题意:给定N个数a1,a2,a3...aN,现在要求最小的n满足 n!/(a1!*a2!*...*aN!) 是一个正整数的最小的n. 分析:这题的想法很明确,就是分解a1!*a2!*...*aN!,把 ...

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

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

  8. Educational Codeforces Round 15 Powers of Two

    Powers of Two 题意: 让求ai+aj=2的x次幂的数有几对,且i < j. 题解: 首先要知道,排完序对答案是没有影响的,比如样例7 1一对,和1 7一对是样的,所以就可以排序之后 ...

  9. CodeForces 377B---Preparing for the Contest(二分+贪心)

    C - Preparing for the Contest Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d ...

随机推荐

  1. C++要点总结

    1.内联成员函数 1)隐式声明:将成员函数直接定义在类的内部 2)显式声明:inline标示 2)在类中,使用inline定义内联函数时,必须将类的声明和内联成员函数的定义都放在同一个文件中,否则编译 ...

  2. SQL 工具系列二

    1.RedGate 工具 SQL Prompt 脚步智能提示工具 脚步提示工具,轻松写入,编辑和探索SQL: SQL Prompt能根据数据库的对象名称,语法和用户编写的代码片段自动进行检索,智能的为 ...

  3. IIS调试技术之 Debug Diagnostic (调试诊断)

    IIS 调试技术之 Debug Diagnostic (调试诊断) 1      概述 1.1  文档简介 系统出现错误或崩溃,免不了要进行调试.调试能进行的前提是错误能重现,但实际上要重现一个错误有 ...

  4. Java基础(三)选择和循环结构

    一.选择结构,条件判断 1.if 语句 一个 if 语句包含一个布尔表达式和一条或多条语句.如果布尔表达式的值为 true,则执行 if 语句中的代码块,否则执行 if 语句块后面的代码. impor ...

  5. 互联网轻量级框架SSM-查缺补漏第四天

    简言:昨天第四章没看完,今天接着记吧. 4.5 typeHandler 类型转换器 顾名思义呀,就是将数据库中数据类型与Java数据类型做相互转换的处理器.在typeHandler中,分为jdbcTy ...

  6. Java多线程系列--CopyOnWriteArraySet

    转载:http://www.cnblogs.com/skywang12345/p/3498497.html 概要 本章是JUC系列中的CopyOnWriteArraySet篇.接下来,会先对CopyO ...

  7. package和package-lock区别;dependencies和devDependencies区别

    package和package-lock package.json: 主要用来定义项目中需要依赖的包 package-lock.json: 在 npm install时候生成一份文件,用以记录当前状态 ...

  8. mybatis整合spring的时候配置数据库信息文件properties注意事项

    信息后面不能有空格 ,格式要xxx.driver xxx.url 这样

  9. React Native之React速学教程(中)

    概述 本篇为<React Native之React速学教程>的第一篇.本篇将从React的特点.如何使用React.JSX语法.组件(Component)以及组件的属性,状态等方面进行讲解 ...

  10. [小北De编程手记] : Lesson 02 - Selenium For C# 之 核心对象

    从这一篇开始,开始正式的介绍Selenium 以及相关的组件,本文的将讨论如下问题: Selenium基本的概念以及在企业化测试框架中的位置 Selenium核心对象(浏览器驱动) Web Drive ...