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

    来自FallDream的博客,未经允许,请勿转载,谢谢。


    T组询问,每次求第ki个没有完全平方因子的正整数。 T<=50  k<=10^9

    很容易想到枚举平方因数,然后容斥原理。容斥因子可以直接求出,就是莫比乌斯函数。所以二分一个答案,就没啦。

    复杂度$O(Tlogksqrt(k))$

    #include<iostream>
    #include<cstdio>
    #define MN 100000
    #define INF 2000000000
    using namespace std;
    inline int read()
    {
        int x = 0 , f = 1; char ch = getchar();
        while(ch < '0' || ch > '9'){ if(ch == '-') f = -1;  ch = getchar();}
        while(ch >= '0' && ch <= '9'){x = x * 10 + ch - '0';ch = getchar();}
        return x * f;
    }
    
    int mu[MN+5],s[MN],num=0;
    bool b[MN+5];
    
    int check(int x)
    {
        int sum=0;
        for(int i=1;i*i<=x;i++) 
            sum+=(x/i/i)*mu[i];
        return sum;
    } 
    
    int main()
    {
        mu[1]=1;
        for(int i=2;i<=MN;i++)
        {
            if(!b[i]) s[++num]=i,mu[i]=-1;
            for(int j=1;s[j]*i<=MN;j++)
            {
                b[s[j]*i]=1;
                if(i%s[j]==0) break;
                mu[s[j]*i]=-mu[i];
            }
        }
        for(int T=read();T;T--)
        {
            int x=read(),l=1,r=INF,ans,mid; 
            while(l<=r)
            {
                mid=1LL*l+r>>1; 
                if(check(mid)>=x) ans=mid,r=mid-1;
                else l=mid+1;
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    正则表达式 \n和\r
    【转】单循环赛赛程安排算法研究
    Iterator效率
    Map获取键值
    PL/SQL语法详解(pdf)
    Iterator模式
    测试js函数的静态页面
    【转】java的一些基本概念
    Oracle 11g用户解锁
    oracle官方文档
  • 原文地址:https://www.cnblogs.com/FallDream/p/bzoj2440.html
Copyright © 2011-2022 走看看