zoukankan      html  css  js  c++  java
  • bzoj2440

    题解:

    莫比乌斯反演

    ans=sigma(x/(i*i)*miu[i])

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    const int N=44723;
    int T,n,flag[N],p[N],tot,miu[N];
    void init()
    {
        miu[1]=1;
        for (int i=2;i<N;i++)
         {
             if (!flag[i])
              {
                  miu[i]=-1;
                  p[++tot]=i;
              }
             for (int j=1;j<=tot;j++)
              {
                  int k=p[j]*i;
                  if (k>=N)break;
                  flag[k]=1;
                  if (i%p[j]==0)
                   {
                       miu[k]=0;
                       break;
                   }
                  miu[k]-=miu[i];
              }
         }
    }
    int pd(int x)
    {
        int ans=0;
        for (int i=1;i<=sqrt(x);i++)ans+=miu[i]*(x/(i*i));
        return ans>=n;
    }
    int main()
    {
        scanf("%d",&T);
        init();
        while (T--)
         {
             scanf("%d",&n);
            int l=0,r=2*n;
            while (l<r)
             {
                 int mid=((long long)l+r+1)/2;
                 if (!pd(mid))l=mid;
                 else r=mid-1;
             }
            printf("%d
    ",l+1); 
         }
    }
  • 相关阅读:
    Android中设置APP应用字体不缩放,文字不随系统字体大小变化
    day02 作业
    day01
    2018.11.2
    2018.11.1
    2018.10.25
    2018.10.24
    2018.10.23
    2018.10.20
    2018.10.19学习总结
  • 原文地址:https://www.cnblogs.com/xuanyiming/p/8538988.html
Copyright © 2011-2022 走看看