码迷,mamicode.com
首页 > 其他好文 > 详细

BZOJ 2440 完全平方数

时间:2016-04-26 00:11:40      阅读:322      评论:0      收藏:0      [点我收藏+]

标签:

考虑二分答案。而且1..n中他喜欢的大概占3/5左右。

考虑莫比乌斯函数与容斥原理,得答案。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#define maxn 100050
using namespace std;
long long t,n,miu[maxn],prime[maxn],cnt=0;
bool vis[maxn];
void get_table()
{
    miu[1]=1;
    for (long long i=2;i<=maxn;i++)
    {
        if (vis[i]==false) 
        {
            vis[i]=true;
            prime[++cnt]=i;
            miu[i]=-1;
        }
        for (long long j=1;j<=cnt && i*prime[j]<=maxn;j++)
        {
            vis[i*prime[j]]=true;
            if (i%prime[j]==0) 
            {
                miu[i*prime[j]]=0;
                break;
            }
            else miu[i*prime[j]]=-miu[i];
        }
    }
}
long long cal(long long x)
{
    long long r=sqrt(x),ret=0;
    for (long long i=1;i<=r;i++)
        ret+=x/(i*i)*miu[i];
    return ret;
}
void work()
{
    scanf("%lld",&n);
    long long l=1,r=2000000000,ans;
    while (l<=r)
    {
        long long mid=(l+r)>>1;
        long long now=cal(mid);
        if (now>=n) {ans=mid;r=mid-1;}
        else l=mid+1;
    }
    printf("%lld\n",ans);
}
int main()
{
    scanf("%lld",&t);
    get_table();
    for (long long i=1;i<=t;i++)
        work();
    return 0;
}

 

BZOJ 2440 完全平方数

标签:

原文地址:http://www.cnblogs.com/ziliuziliu/p/5433136.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!