zoukankan      html  css  js  c++  java
  • bzoj2440: [中山市选2011]完全平方数

    题意:小 X 自幼就很喜欢数。但奇怪的是,他十分讨厌完全平方数。他觉得这些数看起来很令人难受。由此,他也讨厌所有是完全平方数的正整数倍的数。然而这丝毫不影响他对其他数的热爱。 这天是小X的生日,小 W 想送一个数给他作为生日礼物。当然他不能送一个小X讨厌的数。他列出了所有小X不讨厌的数,然后选取了第 K个数送给了小X。小X很开心地收下了。 然而现在小 W 却记不起送给小X的是哪个数了。你能帮他一下吗?
    题解:二分答案,看有多少个满足条件的数,需要减去所有x/pp
    先预处理出2到sqrt(2e9)的莫比乌斯函数,每次check时扫一遍乘上莫比乌斯系数
    x/(p*p)即可

    /**************************************************************
        Problem: 2440
        User: walfy
        Language: C++
        Result: Accepted
        Time:5240 ms
        Memory:1728 kb
    ****************************************************************/
     
    //#pragma comment(linker, "/stack:200000000")
    //#pragma GCC optimize("Ofast,no-stack-protector")
    //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
    //#pragma GCC optimize("unroll-loops")
    #include<bits/stdc++.h>
    #define fi first
    #define se second
    #define mp make_pair
    #define pb push_back
    #define pi acos(-1.0)
    #define ll long long
    #define vi vector<int>
    #define mod 1000000007
    #define C 0.5772156649
    #define ls l,m,rt<<1
    #define rs m+1,r,rt<<1|1
    #define pil pair<int,ll>
    #define pli pair<ll,int>
    #define pii pair<int,int>
    #define cd complex<double>
    #define ull unsigned long long
    #define base 1000000000000000000
    #define fio ios::sync_with_stdio(false);cin.tie(0)
     
    using namespace std;
     
    const double eps=1e-6;
    const int N=50000+10,maxn=5000+10,inf=0x3f3f3f3f,INF=0x3f3f3f3f3f3f3f3f;
     
    bool mark[N];
    int prime[N],mu[N],cnt;
    void init()
    {
        mu[1]=1;
        for(int i=2;i<N;i++)
        {
            if(!mark[i])mu[i]=-1,prime[++cnt]=i;
            for(int j=1;j<=cnt&&prime[j]*i<N;j++)
            {
                mark[i*prime[j]]=1;
                mu[i*prime[j]]=-mu[i];
                if(i%prime[j]==0){mu[i*prime[j]]=0;break;}
            }
        }
    }
    ll check(ll x)
    {
    //    printf("%lld
    ",x);
        ll ans=x;
        for(ll i=2;i*i<=x;i++)ans+=x*mu[i]/(i*i);
        return ans;
    }
    int main()
    {
        init();
        int T;scanf("%d",&T);
        while(T--)
        {
            ll x;
            scanf("%lld",&x);
            ll l=0,r=2e9;
            while(l<r-1)
            {
                ll m=(l+r)>>1;
                if(check(m)>=x)r=m;
                else l=m;
            }
            printf("%lld
    ",l+1);
        }
        return 0;
    }
    /********************
     
    ********************/
    
  • 相关阅读:
    关于migration build failed的问题
    C盘无损扩容(傻逼拯救者128G固态分两个盘)
    .NET Core:搭建私有Nuget服务器以及打包发布Nuget包
    VMware下的Centos7联网并设置固定IP(nat)
    使用docker compose 构建多个镜像
    centos 安装docker-compose
    使用使用dockerfile构建webapi镜像然后使用link和bridge两种方式进行桥接
    docker 安装mysql 并将文件挂载到本地
    Conetos 下安装docker 和镜像加速
    docker 一些命令
  • 原文地址:https://www.cnblogs.com/acjiumeng/p/9245440.html
Copyright © 2011-2022 走看看