zoukankan      html  css  js  c++  java
  • HDU2114 Calculate S(n) (取模算术)

    Calculate S(n)

    Time Limit: 10000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 9102    Accepted Submission(s): 3325


    Problem Description
    Calculate S(n).

    S(n)=13+23 +33 +......+n3 .
     
    Input
    Each line will contain one integer N(1 < n < 1000000000). Process to end of file.
     
    Output
    For each case, output the last four dights of S(N) in one line.
     
    Sample Input
    1 2
     
    Sample Output
    0001 0009
     
    Author
    天邪
    方法一:全算出来。
    思路:当n>10000以后,只用关心后四位的数字即可。
    知识点:模算术公式:(a+b)%n = ((a%n)+(b%n))%n
              (a-b)%n = ((a%n)-(b%n))%n
                a*b%n = (a%n)*(b%n)%n
    #include <cstdio>
    #include <iostream>
    #include <cstdlib>
    #include <algorithm>
    #include <ctime>
    #include <cmath>
    #include <string>
    #include <cstring>
    #include <stack>
    #include <queue>
    #include <list>
    #include <vector>
    #include <map>
    #include <set>
    using namespace std;
    
    const int INF=0x3f3f3f3f;
    const double eps=1e-10;
    const double PI=acos(-1.0);
    #define maxn 10005
    long long a[maxn];
    int main()
    {
        long long sum = 0;
        for(int i = 1; i <= 10000; i++)
        {
            sum += (i%10000*i%10000*i%10000)%10000;
            sum  = sum %10000;
            a[i] = sum;
        }
        int n;
        while(~scanf("%d", &n))
        {
            if(n <= 10000)
            {
                printf("%04d
    ",a[n]);
            }
            else
            {
                int t = n/10000;
                int k = n - t*10000;
                long long sum1 = 0;
                sum1 = ((t%10000)*(a[10000]%10000))%10000 + a[k]%10000;
                printf("%04d
    ",sum1);
    
            }
        }
        return 0;
    }

    方法二:直接公式

    #include <stdio.h>
    int main()
    {
        __int64 n,sum;
        while (scanf("%I64d",&n)!=EOF)
        {
            sum=0;
            n=n%10000;
            sum=(n*(n+1)/2)*(n*(n+1)/2)%10000;// 为了防止计算sum中乘法溢出将n=n%10000;因为要求得后4位数。
            printf("%04I64d
    ",sum);
        }
        return 0;
    }
  • 相关阅读:
    win7网络共享原来如此简单,WiFi共享精灵开启半天都弱爆了!
    JQUERY UI Datepicker Demo
    Official online document, install svn server in centOS
    JAVE not work in linux
    AMR 转mp3 失败
    XD, XR, DR 股票
    Linux 下MySql 重置密码
    Difinition Of Done
    Apache, Tomcat, JK Configuration Example
    Linux 安装tomcat
  • 原文地址:https://www.cnblogs.com/ZP-Better/p/4639624.html
Copyright © 2011-2022 走看看