Codeforces 955C - Sad powers(数论 + 二分)
链接:
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(数论 + 二分)的更多相关文章
- Codeforces 955C Sad powers (数论)
题目链接:Sad powers 题意:给出n个l和r,求出每个给出的[l,r]之间的可以使是另外一个数的k次方的数.(k>=2) 题解:题目给出的数据范围最大是1E18所以如果要直接把所有的从1 ...
- Codeforces 955C Sad powers(数论)
Codeforces 955C Sad powers 题意 q组询问,每次询问给定L,R,求[L,R]区间内有多少个数可以写成ap的形式,其中a>0,p>1,1 ≤ L ≤ R ≤ 1e1 ...
- codeforce 955c --Sad powers 思路+二分查找
这一题的题意是 定义一个数,该数特点是为a的p次方 (a>0,p>1) 再给你n个询问,每个询问给出一个区间,求区间内该数的数目. 由于给出的询问数极大(10e5) 所以,容易想到应该 ...
- [CodeForces - 1225C]p-binary 【数论】【二进制】
[CodeForces - 1225C]p-binary [数论][二进制] 标签: 题解 codeforces题解 数论 题目描述 Time limit 2000 ms Memory limit 5 ...
- CodeForces 359D (数论+二分+ST算法)
题目链接: http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=47319 题目大意:给定一个序列,要求确定一个子序列,①使得该子序 ...
- codeforces 300E Empire Strikes Back 数论+二分查找
题意:给定N个数a1,a2,a3...aN,现在要求最小的n满足 n!/(a1!*a2!*...*aN!) 是一个正整数的最小的n. 分析:这题的想法很明确,就是分解a1!*a2!*...*aN!,把 ...
- Codeforces Round #471 (Div. 2) C. Sad powers
首先可以前缀和 ans = solve(R) - solve(L-1) 对于solve(x) 1-x当中符合条件的数 分两种情况 3,5,7,9次方的数,注意这地方不能含有平方次 平方数 #inclu ...
- Educational Codeforces Round 15 Powers of Two
Powers of Two 题意: 让求ai+aj=2的x次幂的数有几对,且i < j. 题解: 首先要知道,排完序对答案是没有影响的,比如样例7 1一对,和1 7一对是样的,所以就可以排序之后 ...
- CodeForces 377B---Preparing for the Contest(二分+贪心)
C - Preparing for the Contest Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d ...
随机推荐
- JQuery extend()与工具方法、实例方法
使用jQuery的时候会发现,jQuery中有的函数是这样使用的: $.get(); $.post(); $.getJSON(); 有些函数是这样使用的: $('div').css(); $('ul' ...
- RabbitMQ - exchange
总结一下几种ExchangeTypes. 之前写发布/订阅模式时第一次提到了exchange type.即producer不是将消息直接放到队列中,而是先到exchange中,exchange主要用于 ...
- TCP学习(一)
协议分层 可以看到 物理层, 链路层,网络层是所有网络设备共有的, 而传输层, 会话层, 表示层, 应用层 是存在于主机上的 各设备实现的协议层次 IP地址的表示 为什么会出现ip地址?是为了在一 ...
- [javaSE] java上传图片给PHP
java通过http协议上传图片给php文件,对安卓上传图片给php接口的理解 java文件: import java.io.DataOutputStream; import java.io.File ...
- Java finally关键字
关于finally语句块,有如下特点: 1.finally语句块可以直接和try语句块联用.try...finally... 2.try...catch...finally也可以 3.通常在final ...
- Java序列话和反序列化理解(New)
public interface Serializable {} 该接口没有任何实现方法,是一种标志,instance of Serializable 会判断object类型 一.序列化和反序列化的 ...
- csharp: using using System.Web.Script.Serialization read json
using System; using System.Data; using System.Configuration; using System.Collections; using System. ...
- javascript实现SHA1算法
web里面密码直接传到后台是不安全的,有时候需要进行加密,找到一个不错的javascript SHA1算法: <!DOCTYPE html> <html lang="en& ...
- qt 创建资源文件
我们编写的gui可能需要一些额外的资源(比如贴图用的图片),可用资源文件统一管理.以下以图片为例. 用qt creator 打开工程,为工程新建资源文件: 命名为“项目名.prc”,(此处为“cloc ...
- eclipse安装checkStyle
今天用eclipse mars 安装checkstyle 代码测试工具,安装完后重启竟然没有,最后发现原来是 自己安装的步骤错了,记录下. 1. 我的版本是:Version: Mars.2 Relea ...