HDU 5297 Y sequence 容斥 迭代
Y sequence
题目连接:
http://acm.hdu.edu.cn/showproblem.php?pid=5297
Description
Yellowstar likes integers so much that he listed all positive integers in ascending order,but he hates those numbers which can be written as a^b (a, b are positive integers,2<=b<=r),so he removed them all.Yellowstar calls the sequence that formed by the rest integers“Y sequence”.When r=3,The first few items of it are:
2,3,5,6,7,10......
Given positive integers n and r,you should output Y(n)(the n-th number of Y sequence.It is obvious that Y(1)=2 whatever r is).
Input
The first line of the input contains a single number T:the number of test cases.
Then T cases follow, each contains two positive integer n and r described above.
n<=2*10^18,2<=r<=62,T<=30000.
Output
For each case,output Y(n).
Sample Input
2
10 2
10 3
Sample Output
13
14
Hint
题意
有一个序列,一开始是1,2,3,4,5,....,inf 这样的。
然后这个序列把a^b(1<b<=r)都删除掉了。
现在给你n,r。
问你这个序列的第n项是什么。
题解:
假设我们知道了cal(x)表示包括x在内的x之前这个序列有多少个数。
那么显然我们就可以直接二分乱搞就好了。
然后cal怎么做呢?
x(1/b)就表示x范围内有多少个ab次方的数,然后根据这个容斥一波就好了。
比如你减去了2次方的,减去了3次方的,但是你多减了6次方的,你得加回去。
然后你就做完了。
还有一个问题就是二分会TLE,所以你就只能换成迭代做了……
代码
#include<bits/stdc++.h>
using namespace std;
int prime[100],cnt;
long long n;int m;
vector<int>v;
void init()
{
int tot=2;
while(1)
{
if(tot>100)break;
int flag=0;
for(int i=2;i<tot;i++)
if(tot%i==0)flag=1;
if(flag==0)prime[cnt++]=-tot;
tot++;
}
}
void init2()
{
v.clear();
for(int i=0;-prime[i]<=m;i++)
{
int tot = v.size();
for(int j=0;j<tot;j++)
if(abs(v[j]*prime[i])<=63)
v.push_back(v[j]*prime[i]);
v.push_back(prime[i]);
}
}
long long cal(long long x)
{
long long ra = 0;
for(int i=0;i<v.size();i++)
{
long long tmp = exp(log(x+0.5)/abs(v[i]))-1;
if(v[i]<0)ra=ra+tmp;
else ra=ra-tmp;
}
return x-ra-1;
}
int main()
{
init();
int t;
scanf("%d",&t);
while(t--)
{
scanf("%lld%d",&n,&m);
init2();
long long ans = n,tmp = cal(n);
while(tmp<n)
{
ans=ans+n-tmp;
tmp=cal(ans);
}
printf("%lld\n",ans);
}
}
HDU 5297 Y sequence 容斥 迭代的更多相关文章
- HDU 5297 Y sequence Y数列
题意:给定正整数n和r.定义Y数列为从正整数序列中删除全部能表示成a^b(2 ≤ b ≤ r)的数后的数列,求Y数列的第n个数是多少. 比如n = 10. r = 3,则Y数列为2 3 5 6 7 1 ...
- C - Visible Trees HDU - 2841 -莫比乌斯函数-容斥
C - Visible Trees HDU - 2841 思路 :被挡住的那些点(x , y)肯定是 x 与 y不互质.能够由其他坐标的倍数表示,所以就转化成了求那些点 x,y互质 也就是在 1 - ...
- HDU 3970 Harmonious Set 容斥欧拉函数
pid=3970">链接 题解:www.cygmasot.com/index.php/2015/08/17/hdu_3970 给定n 求连续整数[0,n), 中随意选一些数使得选出的 ...
- HDU 4135 Co-prime(容斥:二进制解法)题解
题意:给出[a,b]区间内与n互质的个数 思路:如果n比较小,我们可以用欧拉函数解决,但是n有1e9.要求区间内互质,我们可以先求前缀内互质个数,即[1,b]内与n互质,求互质,可以转化为求不互质,也 ...
- 多校 HDU 6397 Character Encoding (容斥)
题意:在0~n-1个数里选m个数和为k,数字可以重复选: 如果是在m个xi>0的情况下就相当于是将k个球分割成m块,那么很明显就是隔板法插空,不能为0的条件限制下一共k-1个位置可以选择插入隔板 ...
- HDU 1695 GCD(容斥定理)
GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- hdu 6053 trick gcd 容斥
http://acm.hdu.edu.cn/showproblem.php?pid=6053 题意:给定一个数组,我们定义一个新的数组b满足bi<ai 求满足gcd(b1,b2....bn)&g ...
- HDU 4609 3-idiots FFT+容斥
一点吐槽:我看网上很多分析,都是在分析这个题的时候,讲了半天的FFT,其实我感觉更多的把FFT当工具用就好了 分析:这个题如果数据小,统计两个相加为 x 的个数这一步骤(这个步骤其实就是求卷积啊),完 ...
- HDU 4336 Card Collector(容斥)
题意:要收集n种卡片,每种卡片能收集到的概率位pi,求收集完这n种卡片的期望.其中sigma{pi} <=1; 思路:容斥原理.就是一加一减,那么如何算期望呢.如果用二进制表示,0表示未收集到, ...
随机推荐
- Git HTTPS 方式自动保存用户名密码
一行命令搞定: git config --global credential.helper wincred 第一次输入用户名和密码提交,第二次就不需要了 参考: https://help.github ...
- Mysql储存过程3:if语句
--if/else语句 if 条件 then SQL语句 else SQL语句elseifSQL语句 end if; create procedure test1( number int ) begi ...
- 76.ZYNQ-用PS控制DDR3内存读写
本编文章的目的主要用简明的方法对DDR3进行读写,当然这种方式每次读写都需要CPU干预,效率是比较低的,但是这是学习的过程吧. 本系列文章尽可能的让每一个实验都相对独立,过程尽可能保证完整性,保证实验 ...
- iOS通知中心
iOS通知中心 它是iOS程序内部的一种消息广播机制,通过它,可以实现无引用关系的对象之间的通信.通知中心他是基于观察者模式,它只能进行程序内部通信,不能跨应用程序进程通信. 当通知中心接受到消息后会 ...
- Linux阵列 RAID详解 (转)
原文链接:http://molinux.blog.51cto.com/2536040/516008 一. RAID详解 二. mdadm工具介绍 三. 创建一个RAID的基本过程 四. ...
- 开源介绍:Google Guava、Google Guice、Joda-Time
一.Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency lib ...
- nginx 查看当前的连接数
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a,S[a]}' https://www.cnblogs.com/lianzhil ...
- Eloqument 学习
参考地址:https://d.laravel-china.org/docs/5.5/eloquent#mass-assignment
- caffe源码整个训练过程
Caffe源码 Blob protected: shared_ptr<SyncedMemory> data_; shared_ptr<SyncedMemory> diff_; ...
- C#子线程中更新主线程UI-----注意项
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...