【XSY1580】Y队列 容斥
题目大意
给你\(n,r\),求第\(n\)个不能被表示为\(a^b(2\leq b\leq r)\)的数
\(n\leq 2\times {10}^{18},r\leq 62\)
题解
我们考虑二分,求\(\leq m\)的不能被表示为\(a^b\)的数\(f(m)\)
我们先忽略\(1\)
我们钦定能被表示为\(a^2,a^3,a^5\)等\(b\)为质数的数,贡献为\(\lfloor\sqrt[2]{m}\rfloor-1,\lfloor\sqrt[3]{m}\rfloor-1\cdots\),这样也会包含当\(b\)为合数时的情况,例如\(a^4={(a^2)}^2\)
但我们算多了,例如\(a^3=b^2=c^6\),所以我们要减掉\(b\)为两个不同的质数的积的情况,即\(\lfloor\sqrt[6]{m}\rfloor-1,\lfloor\sqrt[10]{m}-1\rfloor\cdots\)
然后加上\(b\)为三个不同的质数的积的情况,减掉\(b\)为四个不同的质数的积的情况……
我们发现\(b=x\)时容斥系数为\(\mu(x)\)
当\(b>62\)时\(\lfloor\sqrt[b]{m}\rfloor=1\),所以不用继续往下算了
还有,开\(n\)次根号可以用pow,不过要传long double参数进去,不然就会炸精度。
但是这样子还会tle,因为有\(30000\)组数据
我们发现\(f(x)\approx\sqrt{x}\)
我们计算出\(f(n)\),然后每次把\(n\)加上\(n-f(n)\),可以很快得到答案
时间复杂度:\(O(???)\)
反正能过且常数巨大就对了
代码
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<ctime>
#include<utility>
#include<cmath>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef long double ld;
int p[100];
int u[100];
int b[100];
int mx[100];
int cnt;
ll n;
int k;
ll fp(ll a,ll b)
{
ll s=1;
while(b)
{
if(b&1)
s=s*a;
a=a*a;
b>>=1;
}
return s;
}
ll calc(ll n,ll x)
{
ll s=floor(ld(pow(ld(n),ld(1)/x)));
return s;
}
ll count(ll x)
{
int i;
ll s=0;
ll nw;
for(i=1;i<=62;i++)
if(mx[i]<=k&&u[i])
{
nw=calc(x,i)-1;
if(!nw)
break;
s+=u[i]*nw;
}
return s;
}
void solve()
{
scanf("%lld%d",&n,&k);
ll t=n;
ll s=count(t);
while(1)
{
t+=n-s;
s=count(t);
if(s==n)
break;
}
printf("%lld\n",t);
}
int main()
{
int i,j;
cnt=0;
memset(b,0,sizeof b);
u[1]=1;
mx[1]=1;
for(i=2;i<=62;i++)
{
if(!b[i])
{
p[++cnt]=i;
mx[i]=i;
u[i]=-1;
}
for(j=1;j<=cnt&&i*p[j]<=62;j++)
{
b[i*p[j]]=1;
mx[i*p[j]]=mx[i];
if(i%p[j]==0)
{
u[i*p[j]]=0;
break;
}
u[i*p[j]]=-u[i];
}
}
int t;
scanf("%d",&t);
while(t--)
solve();
return 0;
}
【XSY1580】Y队列 容斥的更多相关文章
- HDU 5297 Y sequence 容斥 迭代
Y sequence 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5297 Description Yellowstar likes integer ...
- HDU2841 (队列容斥)
Visible TreesTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- Educational Codeforces Round 37 G. List Of Integers (二分,容斥定律,数论)
G. List Of Integers time limit per test 5 seconds memory limit per test 256 megabytes input standard ...
- HDU - 5297:Y sequence (迭代&容斥)
Yellowstar likes integers so much that he listed all positive integers in ascending order,but he hat ...
- Trees in a Wood. UVA 10214 欧拉函数或者容斥定理 给定a,b求 |x|<=a, |y|<=b这个范围内的所有整点不包括原点都种一棵树。求出你站在原点向四周看到的树的数量/总的树的数量的值。
/** 题目:Trees in a Wood. UVA 10214 链接:https://vjudge.net/problem/UVA-10214 题意:给定a,b求 |x|<=a, |y|&l ...
- hdu 5664 Lady CA and the graph(树的点分治+容斥)
题意: 给你一个有n个点的树,给定根,叫你找第k大的特殊链 .特殊的链的定义:u,v之间的路径,经过题给的根节点. 题解:(来自BC官方题解) 对于求第k大的问题,我们可以通过在外层套一个二分,将其转 ...
- HDU 4059 容斥初步练习
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> ...
- 【BZOJ-4455】小星星 容斥 + 树形DP
4455: [Zjoi2016]小星星 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 204 Solved: 137[Submit][Status] ...
- UVa12633 Super Rooks on Chessboard(容斥 + FFT)
题目 Source http://acm.hust.edu.cn/vjudge/problem/42145 Description Let’s assume there is a new chess ...
随机推荐
- find和grep命令合集
linux grep命令 1.作用Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expressi ...
- python3 pip 安装Scrapy在win10 安装报错error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": http://landinghub.visualstudio.com/visual-cpp-build-tools
问题描述 当前环境win10,python_3.6.1,64位. 在windows下,在dos中运行pip install Scrapy报错: building 'twisted.test.raise ...
- UVA - 12716 - 异或序列
求满足GCD(a,b) = a XOR b; 其中1<=b <=a<=n. 首先做这道题需要知道几个定理: 异或:a XOR b = c 那么 a XOR c = b; 那么我们令G ...
- 解析vue2.0的diff算法 虚拟DOM介绍
react虚拟dom:依据diff算法台 前端:更新状态.更新视图:所以前端页面的性能问题主要是由Dom操作引起的,解放Dom操作复杂性 刻不容缓 因为:Dom渲染慢,而JS解析编译相对非常非常非常快 ...
- github导入文件操作
建立本地仓库: 创建新仓库的指令: git init //把这个目录变成Git可以管理的仓库 git add README.md //文件添加到仓库 git add . //不但可以跟单一文件,还可以 ...
- Mysql MyISAM与InnoDB 表锁行锁以及分库分表优化
一. 两种存储引擎:MyISAM与InnoDB 区别与作用 1. count运算上的区别: 因为MyISAM缓存有表meta-data(行数等),因此在做COUNT(*)时对于一个结构很好的查询是不需 ...
- Python_面向对象_单例模式
class A(object): pass a1 = A() a2 = A() print(a1 == a2)print(id(a1))print(id(a2)) 结果: False 23257231 ...
- Python __slots__ 作用
参考:https://blog.csdn.net/u010733398/article/details/52803643 https://blog.csdn.net/sxingming/artic ...
- python爬虫之git的使用(windows下pycharm使用)
相信很多同学学会了git或者github以后都不知道怎么跟windows上的pycharm连在一起工作,那么下面我们开始介绍简单的安装和使用方法. 一.安装 1.首先你的有一个github的账户.注册 ...
- Sqoop 使用详解(内含对官方文档的解析)
Sqoop 是 Cloudera 公司创造的一个数据同步工具,现在已经完全开源了. 目前已经是 hadoop 生态环境中数据迁移的首选,另外还有 ali 开发的 DataX 属于同类型工具,由于社区的 ...