zoukankan      html  css  js  c++  java
  • BZOJ_2440_[中山市选2011]完全平方数_容斥原理+线性筛

    BZOJ_2440_[中山市选2011]完全平方数_容斥原理

    题意:

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

    分析:

    二分答案,转化成1~x中不是完全平方数倍数的数的个数

    答案=所有数-1个质数的平方的倍数+2个质数乘积的平方的倍数

    =x-x/2^2-x/3^2+x/4^2-x/5^2+x/6^2

    发现容斥的系数就是μ

    线性筛即可

    代码:

    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    #include <bitset>
    using namespace std;
    #define LL long long
    int T,n;
    bitset<100010>vis;
    LL ans;
    int prime[100010],miu[100010],cnt;
    void init(){
        int i,j;
        miu[1]=1;
        for(i=2;i<=100000;i++){
            if(!vis[i]){
                prime[++cnt]=i;
                miu[i]=-1;
            }
            for(j=1;j<=cnt&&i*prime[j]<=100000;j++){
                vis[i*prime[j]]=1;
                if(i%prime[j]==0){
                    miu[i*prime[j]]=0;break;
                }
                miu[i*prime[j]]=-miu[i];
            }
        }
    }
    LL check(LL x){
        LL i;
        LL re=0;
        for(i=1ll;i*i<=x;i++){
            re+=miu[i]*x/(i*i);
        }
        return re;
    }
    int main(){
        scanf("%d",&T);
        init();
        while(T--){
            scanf("%d",&n);
            LL l=0,r=1ll<<33;
            while(l<r){
                LL mid=l+r>>1ll;
                if(check(mid)>=n)r=mid;
                else l=mid+1;
            }
            printf("%lld
    ",l);
        }
    }
    
  • 相关阅读:
    对list集合中的对象进行排序(转载)
    关键字的作用
    CocoaPods的 安装 /卸载/升级
    block基本使用和底层
    程序启动 - 类调用的方法
    成员变量修饰词的作用
    宏(define)与常量(const)
    iOS
    监听网络状态
    nil、Nil、NULL与NSNull的区别及应用
  • 原文地址:https://www.cnblogs.com/suika/p/8543267.html
Copyright © 2011-2022 走看看