zoukankan      html  css  js  c++  java
  • 函数求值一<找规律>

    函数求值

    题意:

        定义函数g(n)为n最大的奇数因子。求f(n)=g(1)+g(2)+g(3)+…+g(n)。1<=n<=10^8;
    

    思路:

    首先明白暴力没法过。问题是如何求解,二分。知道奇数的最大因子是他本身,并且小于等于n的奇数的和很容易就可以求出来(等差数列)。那么剩下的偶数除以2得到n`,然后去求小于等于n`的奇数,最后得解。
    
    <long long>
    #include<cstdio>
    typedef long long  LL;
    int main ()
    {
        LL n,ans;
        while (~scanf("%lld",&n))
        {
            ans=0;
            for(;n>=1;n/=2)
            {
                if(n%2==0)
                    ans+=n*n/4;
                else
                    ans+=(n+1)*(n+1)/4;
            }
            printf("%lld
    ",ans);
        }
        return 0;
    }
    
    想的太多,做的太少。
  • 相关阅读:
    3
    2
    1
    11
    12
    8888888888
    99999999999
    88888888888
    77777777
    10.23
  • 原文地址:https://www.cnblogs.com/pealicx/p/6115631.html
Copyright © 2011-2022 走看看