zoukankan      html  css  js  c++  java
  • HYSBZ 2440 完全平方数(莫比乌斯反演)

    链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2440

     

    i为质数,ni*i的倍数,则称n为含平方因子数。

    1~n的无平方因子数。

     

    F(x)1~x的平方因子数数量,则由容斥原理及莫比乌斯函数知:

     

     

    G(x)1~x的无平方因子数数量,则:

     

     

    二分法枚举,注意二分法的写法。

     

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<queue>
    #include<vector>
    #include<string>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    typedef long long LL;
    const int N=45000;
    bool vis[N];
    int mu[N];
    int prime[N];
    void Mobius(int n){
        memset(vis,0,sizeof(vis));
        mu[1]=1;
        int tot=0;
        for(int i=2;i<=n;i++){
            if(!vis[i]){
                prime[tot++]=i;
                mu[i]=-1;
            }
            for(int j=0;j<tot&&i*prime[j]<=n;j++){
                vis[i*prime[j]]=true;
                if(i%prime[j]==0){
                    mu[i*prime[j]]=0;
                    break;
                }else{
                    mu[i*prime[j]]=-mu[i];
                }
            }
        }
    }
    
    LL getNum(int n){
        int e = (int)sqrt(n);
        LL ans = 0;
        for(LL i = 1; i <= e; i++){
            ans += mu[i] * (LL)(n/(i * i));
        }
        return ans;
    }
    int main(){
        Mobius(N - 2);
        int t, k;
        scanf("%d", &t);
        while(t--){
            scanf("%d", &k);
            LL l = 1, r = 2 * k + 1;
            while(l < r){
                LL mid = (l + r)/2;
                if(getNum(mid) < k){
                    l = mid + 1;
                }else{
                    r = mid;
                }
            }
            printf("%lld
    ", l);
        }
        return 0;
    }
  • 相关阅读:
    容器占用空间的小问题
    一个ipv4到ipv6的移植问题
    一个linux内核模块移植到低版本时发生的异常
    一个发包乱序问题记录
    一个docker镜像中的目录删除不了问题
    C/C++(共用体与枚举)
    C/C++(数据结构栈的实现)
    C/C++(结构体)
    C/C++(内存管理)
    C/C++(指针数组)
  • 原文地址:https://www.cnblogs.com/IMGavin/p/5505686.html
Copyright © 2011-2022 走看看