zoukankan      html  css  js  c++  java
  • JDOJ 2782: 和之和

    JDOJ 2782: 和之和

    JDOJ传送门

    Description

    给出数n,求ans=(n+1)+(n+2)+...+(n+n)

    Input

    一行,一个整数n

    Output

    一行,一个整数ans%23333333333333333(2后面16个3)

    Sample Input

    1

    Sample Output

    2

    HINT

    0<=n<=1012,实际上可能还会更小点

    最优解声明及解题背景:

    (一道困扰了我半年的题)果然本蒟蒻还是太菜了/

    很多学弟和比我后学的都比我先切了这道题,但是我还迟迟没有切。。

    前几天补了快速幂和快速乘,想重新A这道题,没想到又WA......

    然后经过各种玄学推导及修正了一堆小错误之后。。。

    还是卡到了C语言的最优解。

    题解:

    一开始的思路是裸的n*n+一个1-n的等差数列。

    后来被卡了百分之9,因为等差数列的公式在本题的数据范围会爆,而加模之后又不能保证除法式的正确性。

    所以我们想到了另一种做法:快速乘。

    如果对快速乘不太了解的小伙伴请参考以下的博客:

    浅谈快速幂

    代码:

    #include<cstdio>
    #define ll long long
    #define mod 23333333333333333ll
    using namespace std;
    ll n,ans;
    ll qmult(ll a,ll b)
    {
        ll ret=0;
        while(b>0)
        {
            if(b&1)
                ret=(ret+a)%mod;
            a=(a+a)%mod;
            b>>=1;
        }
        return ret;
    }
    int main()
    {
        scanf("%lld",&n);
        if(n&1)
            ans=qmult(n,(3*n+1)/2)%mod;
        else
            ans=qmult((3*n+1),n/2)%mod;
        printf("%lld",ans);
        return 0;
    }
    
  • 相关阅读:
    08--Docker安装Mysql
    第三天
    html---Keymaker-EMBRACE
    解析selenium http://blog.csdn.net/java2000_net/article/details/3721706
    selenium
    day4复习
    函数
    列表
    int整数和bool值
    字符串方法整理
  • 原文地址:https://www.cnblogs.com/fusiwei/p/11619181.html
Copyright © 2011-2022 走看看