zoukankan      html  css  js  c++  java
  • bzoj2440完全平方数

    题目链接

    上来先吐槽题面!!!!!!

    你跟我说$1$不是完全平方数昂?

    看了半天样例啊。

    活生生的半天$……$

    莫比乌斯 反演    函数容斥一下,每次二分就好

    反正本宝宝不知道反演是啥。

    每次判断应该是

    $$sum^{ lfloor sqrt{x} floor}_{i=1} frac{x}{i^{2}}*mu(x)$$

    然后二分就好,

    打表得出上界,之后就没了

    /**************************************************************
        Problem: 2440
        User: zhangheran
        Language: C++
        Result: Accepted
        Time:4648 ms
        Memory:6560 kb
    ****************************************************************/
     
    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    //#include"suqingnian.h"
    using namespace std;
         
        int mu[600100];
        const int __n=56000;
        bool __check[600010];
        int __size;
        int _num[600010];
        void _prime()
        {
          for(int _i=2;_i<=__n;_i++)
            {
              if(!__check[_i]) _num[++__size]=_i,mu[_i]=-1;
              for(int _j=1;_j<=__size;_j++)
              {
                if(_i*_num[_j]>=__n) break;  
                __check[_num[_j]*_i]=1;
                if(_i%_num[_j]==0) {mu[_i*_num[_j]]=0;break;}
                mu[_i*_num[_j]]=mu[_i]*mu[_num[_j]];
              }
            }
            mu[1]=__check[1]=1;
          return ;
        }
    //    bool _isprime(int __n) {return ~__check[__n];}
     
    int t;
    long long k;
    long long calc(long long x)
    {
         
        long long sum=0;
        for(long long i=1;i*i<=x;i++)
          sum+=x/(i*i)*mu[i];
    //  printf("%lld %lld
    ",x,sum);
        return sum;
    }
    //long long che(long long l,long long r,long long)
    //{
    //  
    //}
    long long hint(long long x)
    {
        long long ans=0;
        long long l=x,r=1644934081;
        while(l<=r){
    //      printf("%lld %lld
    ",l,r);
            long long mid=l+r>>1;
    //      printf("%lld 
    ",calc(mid));
            if(calc(mid)>=x) ans=mid,r=mid-1;
            else l=mid+1;
        }return ans;
    }
    int main()
    {
        scanf("%d",&t);
        _prime();
        while(t--)
        {
            scanf("%lld",&k);
            printf("%lld
    ",hint(k));
        }
    }
  • 相关阅读:
    Unity3d与Android交互
    A star 寻路
    网络协议
    数据驱动
    有限状态机(FSM)
    自己封装一个Log模块
    Unity5.x版本AssetBundle加载研究
    Unity5.x版本AssetBundle打包研究
    alidoing --使用JS实现多语言框架、喜欢的请进、、瓦特平台!
    使用代码生成器“代码工厂”快速生成B/S程序代码
  • 原文地址:https://www.cnblogs.com/arcturus/p/9363495.html
Copyright © 2011-2022 走看看