(0! + 1! + 2! + 3! + 4! + ... + n!)%m

Description
The GNU Compiler Collection (usually shortened to GCC) is a compiler system produced by the GNU Project supporting various
programming languages. But it doesn’t contains the math operator “!”. In mathematics the symbol represents the factorial
operation. The expression n! means "the product of the integers from 1 to n". For example, 4! (read four factorial) is
 4 × 3 × 2 × 1 = 24. (0! is defined as 1, which is a neutral element in multiplication, not
multiplied by anything.) We want you to help us with this formation: (0! + 1! + 2! + 3! + 4! + ... + n!)%m

Input

The first line consists of an integer T, indicating the number of test cases. Each test on a single consists of two integer n and m.
Output

Output the answer of (0! + 1! + 2! + 3! + 4! + ... + n!)%m. Constrains 0 < T <= 20 0 <= n < 10^100 (without leading zero) 0 < m < 1000000
Sample Input
1 10 861017
Sample Output
593846
解题思路:我采用的是化简法:
0! + 1! + 2! + 3! + 4! + ... + n!
=1 + 1 * (1+2*~2+2*~3+....+2*~n)
=1 + 1 * (1+2 * (1 + 3*~3+....+3*~n))
=1 + 1 * (1+2 * (1+ 3 * (......(1 + n * (1 + 0)))))
这样化简后,可以从后往前递推记s初始为1;然后
for (int i = n; i >= 1; i--)
 { s = 1 % m + ((i %m) * (s%m))%m ; }
s %=m;
方法一:
我的代码如下:
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;

#define MAX_LEN 110
int main()
{
    long m;
    long n = 0;
    char ch[MAX_LEN];
    int testNum, i;

    cin >> testNum;
    for (int test = 1; test <= testNum; test++)
    {
        scanf("%s %ld", ch, &m);
        //***************确定n的值*********************************
        for (i = 0; ch[i] != '\0'; i++)
            ;
        int len = i;

        //cout << "ch =" << ch << endl;
       // cout << "len = " << len << endl;
        if (len >= 7)
        {
            n = m-1;
        }
        else
        {
            int k = 1;
            n = ch[len-1]-'0';
            for (int j = len-2; j >= 0; --j)
            {
                n += long((ch[j] - '0') * pow(10.0, double(k)));
                k ++;
                if (n >= m)
                {
                    n = m-1;
                    break;
                }
            }
        }
        //***********************************************************
        //cout << "n = " << n << endl;
        long long s = 1;
        for (i = n; i >= 1; i--)
        {
           //s = (1 + i * s) % m;
           s = 1 % m + ((i % m) * (s % m)) % m;
        }
        s %= m;
        cout << s << endl;
    }

    return 0;
}

方法二:
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;

#define MAX_LEN 110
int main()
{
    long m;
    long n = 0;
    char ch[MAX_LEN];
    int testNum, i;

    cin >> testNum;
    for (int test = 1; test <= testNum; test++)
    {
        scanf("%s %ld", ch, &m);
        //***************确定n的值*********************************
        for (i = 0; ch[i] != '\0'; i++)
            ;
        int len = i;

        //cout << "ch =" << ch << endl;
       // cout << "len = " << len << endl;
        if (len >= 7)
        {
            n = m-1;
        }
        else
        {
            int k = 1;
            n = ch[len-1]-'0';
            for (int j = len-2; j >= 0; --j)
            {
                n += long((ch[j] - '0') * pow(10.0, double(k)));
                k ++;
                if (n >= m)
                {
                    n = m-1;
                    break;
                }
            }
        }
        //***********************************************************
        //cout << "n = " << n << endl;
        long long s = 1;//0!=1
        long long t = 1;//0!=1
        long sum = 1;
        for (i = 1; i <= n; i++)
        {
            t = (t % m) * (i % m);
            s = t % m;
            sum = (s  + sum % m) % m;
        }
        cout << sum % m << endl;
    }

    return 0;
}

 
时间: 2024-11-05 14:50:07

(0! + 1! + 2! + 3! + 4! + ... + n!)%m的相关文章

Spring.Net在Mvc4.0中应用的说明

案例Demo:http://yunpan.cn/cJ5aZrm7Uybi3 访问密码 414b Spring.Net在Mvc4.0中应用的说明 1.引用dll       2.修改Global文件 (SpringMvcApplication)       3.控制器添加属性     4.WebConfig配置   <!--必须紧跟着configuration之后-->   <configSections>     <sectionGroup name="spring

Android 4.0设计规范10大改变

在拜读和翻译了Android design设计指导后,对比Android 4.0与Android2.3及之前版本的app设计指导,总结了Android 4.0设计的10大改变: 1. 导航栏 (详见模式PATTERNS>导航Navigation) 由之前的物理按键导航(返回.菜单.搜索.主页)变成了嵌入屏幕的虚拟按键(返回.主页.最近任务).   左侧为早期有4个物理按键的手机,右侧为新版只有3个虚拟按钮的手机 把菜单项和搜索项从导航栏去掉,把之前通过长按主页键才出现的最近任务直接展示在导航栏中

php中0与空 Null false的区别

  代码如下   <?php $test=0; if($test==''){  echo '<br />在php中,0即为空'; //被输出 } if($test===''){  echo '<br />在php中,0即为空'; //不被输出 } if($test==NULL){  echo '<br />在php中,0即为空'; //被输出 } if($test===NULL){  echo '<br />在php中,0即为空'; //不被输出 }

Asp.net 1.0 升级至 ASP.NET 2.0十个问题总结

asp.net|问题     这几天升级了一下原来的1.1项目,发现了一些问题,总结一下放在这里,也提醒还没有来得及升级或准备升级的朋友,升级的过程中少走弯路,少浪费时间. 1.Global.asax文件的处理形式不一样 转化后将出现错误,在vs2003中Global.asax具有代码后置文件,2.0下, 将代码分离文件移到 App_Code 目录下,以便使其自动变为可通过应用程序中的任意 ASP.NET 页面访问."Code-behind"属性将从 ASAX 文件的指令中删除.vs2

.NET 2.0 基础类库中的范型——其他范型类

其他范型类.NET 2.0 基础类库对范型的应用当然并不仅限于范型集合和 Functional Programming.下面所列的范型类也都有其明确的设计目的和用途. Array在.NET 2.0中,Array 类扩充了对范型编程的支持.当然,Array类本身并不是范型类(出于兼容的考虑),而是提供了一系列支持范型的方法.除了前面提到的 Functional Programming 的支持外,Array 类还对以前很多基于 object 的方法提供了对应的范型版本,这样对值类型可以提高查找和排序

android4.0+怎么捕获home键

问题描述 android4.0+怎么捕获home键 android4.0+怎么捕获home键 不用event方法QQQQQQQQ求77777777777777777777 解决方案 http://blog.sina.com.cn/s/blog_896b1e670100wqcy.html 解决方案二: http://f120412352.iteye.com/blog/1461501 解决方案三: http://blog.sina.com.cn/s/blog_896b1e670100wqcy.htm

安装 OpenLiteSpeed 1.4 + PHP 7.0 设置篇

此篇接上篇 <安装篇>,这里介绍如何在 OpenLiteSpeed 中以 LSAPI 跑 PHP的设置篇.因为两篇文章合起来比较长,所以这里分开写. O喷 LiteSpeed 的设置有点像 IIS 的设置,还是蛮有意思的. 因为根据 LiteSpeed 的官方数据显示,LSAPI 跑 PHP 是 LS 下最高效的,所以这里就不介绍 Fast-CGI 的方式了. 一.访问面板,设置中文 1.登入 WebAdmin ,默认在 7080 端口,例如米饭粑就可以通过 https://www.mf8.b

extjs4.0 应用 新建项目怎么添加包

问题描述 extjs4.0 应用 新建项目怎么添加包 如题所示,网上也百度了一些但是总是有些功能不能用,还有5.0兼容4.0吗?急救....拜谢大神 解决方案 extjs的相对容易配置,你先把java和eclipse的环境配置好,然后把extjs的包放到自己的项目中就行了,高版本未必完全兼容低版本,有可能修改了类名,或者某些方法不用了,你可以试试,正常情况下不会有大问题

怎样在Redhat 9.0下让PHP支持Java类

最近在Linux下的PHP支持Java类,我把调试笔记经过整理总结后写出来,希望对大家今后的调试会有所帮助. 系统环境: Redhat 9.0 Apache-1.3.27 Mysql3.23-54a-11 Php-4.32 j2sdk1.4.1_03 安装配置: 1.mysql使用的是redhat9自带的rpm包,不介绍安装了,jdk的安装也很简单,我们把jdk安装到/usr/java/j2sdk1.4.1_03 并在/etc/profile设置jdk环境参数. 2.编译安装apache tar

图解:PHP 在Windows 2003 Enterprise Server 、IIS6.0 下的安装

enterprise|iis|server|window 有朋友反映在win2000中IIS和PHP工作好好的, 在win2003 enterprise server中,按照2000下的做法PHP不工作.其实在Windows2003下安装也是很简单的,只不过Win2003在IIS6.0的安全方面下了些功夫,所以安装起来要稍费点功夫了. 步骤1,先去www.php.net下在一个安装程序,我是装的是:php-4.2.3-installer.exe,你也可以去找最新的版本,在安装php-4.2.3-