• HDU 3123 GCC


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

    题意:!代表阶乘,0的阶乘为1,求(0! + 1! + 2! + 3! + 4! + ... + n!)%m的结果。

    思路:一开始想的复杂了,因为题中n的范围太大了,所以想用大数乘法来着,结果因为阶乘的和还要加起来取余,所以以为还要大数加,再来一个n(a + b) % p = (a % p + b % p) % p这个公式就差不多了,但是想的太多了,真的很复杂,其实没有那么复杂,就是判断一下n和m 的大小,因为如果n比m大的话,从m!+(m+1)!....n!这一些对m取余都是0,所以就不需考虑了,而剩下的最大也就是m的范围,就不用大数去处理了,用long long存一下也不会超

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    int main()
    {
        char sh[300],ch[3000] ;
        int n ;
        scanf("%d",&n) ;
        for(int i = 0 ; i < n ; i++)
        {
            scanf("%s %s",sh,ch) ;
            int len1 = strlen(sh) ;
            int len2 = strlen(ch) ;
            long long s = atoi(sh) ;//将字符串转化成整型数
            long long c = atoi(ch) ;
            if(len1 > len2)//如果第一个字符串比第二个的长,说明n肯定比m大
                s = c-1 ;
            if(len1 == len2&&s > c)
                s = c-1 ;
            long long factorial = 1 ;
            long long sum = 0 ;
            long long j ;
            for(j = 1 ; j <= s ; j++)
            {
                factorial = (factorial*j)%c ;
                sum = (sum+factorial)%c ;
            }
          printf("%lld
    ",(sum+1)%c) ;//还有0的阶乘为1,因为上边没有加上,所以这里要加上
        }
        return 0 ;
    }
    View Code
  • 相关阅读:
    WebGL——osg框架学习一
    webgl绘制粗线段
    ThreeJS实现波纹粒子效果
    WebGL——水波纹特效
    WebGL之shaderToy初使用
    有效提升职场竞争力
    Windows结构化异常处理浅析
    一起学习Boost标准库--Boost.StringAlgorithms库
    科学计算工具-Numpy初探
    进程动态拦截注入API HOOK
  • 原文地址:https://www.cnblogs.com/luyingfeng/p/3404124.html
Copyright © 2020-2023  润新知