• 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);
        }
    }
    
  • 相关阅读:
    BluetoothGetRadioInfo 函数
    BluetoothFindRadioClose 函数
    BluetoothFindNextRadio 函数
    BluetoothFindFirstRadio 函数
    BLUETOOTH_DEVICE_INFO 函数
    BluetoothSetServiceState 函数
    Bluetooth Functions
    union联合体学习
    置顶
    Toppo: 1
  • 原文地址:https://www.cnblogs.com/suika/p/8543267.html
Copyright © 2020-2023  润新知