【题目大意】

求第k个不是完全平方数或完全平方数整数倍的数。

【思路】

  由于μ(i)*(n/i^2)=n,可以直接从1开始,得出非完全平方数/完全平方数倍数的数的个数

注意一下二分的写法,这里用的是我一直比较喜欢的一种二分写法:

int lb=下界-1,ub=上界

while (ub-lb>1)

{

  int mid=(lb+ub)>>1;

  if (a[mid]>=k) ub=mid; else lb=mid;

}

ans=ub;

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const ll MAXN=+;
const ll INF=0x7fffffff;
int T;
ll k;
int miu[MAXN];
ll prime[MAXN];
int pnum=; void get_miu()
{
for (int i=;i<MAXN;i++) miu[i]=-INF;
miu[]=;
for (int i=;i<MAXN;i++)
{
if (miu[i]==-INF)
{
miu[i]=-;
prime[++pnum]=i;
}
for (int j=;j<=pnum;j++)
{
if (i*prime[j]>=MAXN) break;
if (i%prime[j]==) miu[i*prime[j]]=;
else miu[i*prime[j]]=-miu[i];
}
}
} ll square(ll x)
{
ll res=;
for (int i=;i*i<=x;i++) res+=miu[i]*(x/(i*i));
return res;
} ll get_ans()
{
ll lb=-,ub=MAXN*MAXN;
while (ub-lb>)
{
ll mid=(lb+ub)>>;
ll nowk=square(mid);
if (nowk>=k) ub=mid;
else lb=mid;
}
return ub;
} int main()
{
get_miu();
scanf("%d",&T);
for (int i=;i<T;i++)
{
scanf("%lld",&k);
printf("%lld\n",get_ans());
}
return ;
}

最新文章

  1. Web APi之认证(Authentication)两种实现方式后续【三】(十五)
  2. linux中给PHP安装mongodb的扩展
  3. 子句jion
  4. php js =&gt; splice 数组 插入 功能
  5. git_2-linux
  6. 关于 mobile sui a外链 老是出现加载失败的解决办法
  7. [转]使用Beaglebone Black的SPI
  8. POJ 1565 Skew Binary(简单的问题)
  9. Ali也开始玩了阿
  10. 数据意识崛起,从企业应用看BI软件的未来发展
  11. How to setup Eclipse with WinAVR and the Eclipse plugin AVR-eclipse
  12. IOS语音录取
  13. Spring事件解析
  14. java校验字符串是否为json格式
  15. T-SQL:qualify和window 使用(十七)
  16. js中的块级作用域
  17. I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
  18. JSP概述、API、注释
  19. plotly简单绘制柱状图
  20. oracle备份恢复

热门文章

  1. HDU 多校对抗赛 C Triangle Partition
  2. C++ 中 string, char*, int 类型的相互转换
  3. 如何把SSL公钥和私钥转化为PFX格式
  4. java 身份证15位转18位
  5. P3076 [USACO13FEB]出租车Taxi
  6. bzoj 4999: This Problem Is Too Simple!
  7. vue this.$router.push 页面不刷新
  8. 计算Linux权限掩码umask值
  9. python3,判断,循环练习1
  10. Make recursive