• HDU 5053 the Sum of Cube(简单数论)


    http://acm.hdu.edu.cn/showproblem.php?pid=5053

    题目大意:

      求出A^3+(A+1)^3+(A+2)^3+...+B^3和是多少

    解题思路:

      设f(n)=1~n的立方和,则A^3+(A+1)^3+(A+2)^3+...+B^3=f(B) - f(A - 1)

      题目给的数的范围是1~10000,1~10000立方和不会超过__int64(long long)的范围。由于是10000个数立方和。

    所以可以选择打表(不知道立方和的公式,可以选择打表)。

    立方和公式:1^3+2^3+3^3+4^3+...+n^3 = (n*(n+1)/2)^2

    AC代码:

    这里是是打表的思路

     1 #include<stdio.h>
     2 #include<string.h>
     3 
     4 typedef long long LL;
     5 
     6 const LL MAXN = 10001;
     7 
     8 int main(){
     9     int T, A, B;
    10     LL ans, a[MAXN];
    11 
    12     memset(a, 0, sizeof(a));
    13     for(LL i = 1; i < MAXN; ++i){
    14         a[i] = a[i - 1] + i * i * i;
    15     }
    16 
    17     scanf("%d", &T);
    18     for(int cs = 1; cs <= T; ++cs){
    19         scanf("%d%d", &A, &B);
    20 
    21         printf("Case #%d: %I64d
    ", cs, a[B] - a[A - 1]);
    22     }
    23     return 0;
    24 }

    利用公式:

     1 #include<stdio.h>
     2 #include<string.h>
     3 
     4 typedef long long LL;
     5 
     6 LL f(LL n){
     7     return n * (n + 1) * n * (n + 1) / 4;
     8 }
     9 
    10 int main(){
    11     int T, A, B;
    12     scanf("%d", &T);
    13     for(int cs = 1; cs <= T; ++cs){
    14         scanf("%d%d", &A, &B);
    15         printf("Case #%d: %I64d
    ", cs, f(B) - f(A - 1));
    16     }
    17     return 0;
    18 }

     

  • 相关阅读:
    DTD与shema学习
    xml基本语法学习
    快速写出main方法和system.out.print()
    Eclipse常见快捷键
    System.out.print()与toString()
    HttpURLConnection学习
    如何查看开关机时间
    阿里云云服务器硬盘分区及挂载
    java环境搭建
    使用jstack 发现死锁
  • 原文地址:https://www.cnblogs.com/xuqiulin/p/4000165.html
Copyright © 2020-2023  润新知