暑假热身 A. GCC

GCC编译器是一个由GNU项目维护的编译系统,它支持多种编程语言的编译。但是它并不包含数学运算符“!”。在数学中,这个符号代表阶乘。表达式n!的意思是从1到n的所有整数的乘积。

例如,4!=4*3*2*1=24. (0!定义为1) 现在请你写程序计算一下 (0! + 1! + 2! + 3! + 4! + ... + n!)%m。

Input

第一行是一个整数T,代表了测试数据的组数。

每组测试数据单独一行,包括一个整数n和m,用一个空格隔开。

0 < T <= 20 0 <= n < 10^100 0 < m <= 10000

Output

对应每组输入,单独输出一行,给出(0! + 1! + 2! + 3! + 4! + ... + n!)%m的结果。

Sample Input

1
10 1017

Sample Output

424

每算一次取一次余有效减少运算量。

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 using namespace std;
 5 int main()
 6 {
 7     long m;
 8     long n = 0;
 9     char ch[110];
10     int num, i;
11
12     cin >> num;
13     for (int test = 1; test <= num; test++)
14     {
15         scanf("%s %ld", ch, &m);
16         for (i = 0; ch[i] != ‘\0‘; i++)
17             ;
18         int len = i;
19         if(len>=7)
20         {
21             n=m-1;
22         }
23         else
24         {
25             int k = 1;
26             n = ch[len-1]-‘0‘;
27             for (int j = len-2; j >= 0; --j)
28             {
29                 n += long((ch[j] - ‘0‘) * pow(10.0, double(k)));
30                 k ++;
31                 if (n >= m)
32                 {
33                     n = m-1;
34                     break;
35                 }
36             }
37         }
38         long long s = 1;
39         for (i = n; i >= 1; i--)
40         {
41            s = (1 + i * s) % m;
42            //s = 1 % m + ((i % m) * (s % m)) % m;
43         }
44         s %= m;
45         cout << s << endl;
46     }
47     return 0;
48 }

时间: 2024-11-09 00:49:08

暑假热身 A. GCC的相关文章

暑假热身 D. 条形码设计

校ACM队准备筹划向学校批请一个专用机房.但是为了防止它变成公用机房,FL建议采用刷卡进入的办法,她设计了一种条形码,每人都对应一个.这种大小为2*n的条形码由以下三种元素构成:1*2.2*1.2*2的长方形方格.但是我们同样也知道,很多人都容易在刷卡时把卡的位置搞反.为了避免机器错误的处理,我们认为下图的两种条形码是一样的(图中颜色只是为方便说明,不用考虑). FL现在很想知道一个问题,就是用她的这种条形码编码方式,对于一个给定的长度n最多能有多少不同的条形码可供使用? Input 多组测试数

暑假热身 E. 无聊的LSY

LSY大牛没事就爱玩游戏,包括很多很无聊的游戏.某日,LSY大牛又找到了一个无聊的游戏:每一局游戏的开始,LSY大牛将代表自己的棋子放在一个线性棋盘的最左端(第0个格子,可以认为向右端无限延伸),接着,他会从浩大的牌堆里随机摸三张牌A,B和N,在本局中,LSY大牛可以将代表自己的棋子向左或者向右移动A或者B个格子,当LSY的棋子停在了第N个格子上的时候,LSY大牛将获得本局比赛的胜利.当然,这游戏实在是有点太无聊了……于是LSY大牛希望大家写一个小程序来帮助他判断当前比赛是否能够获胜. Inpu

暑假热身 B. 下载测速

最近,nono终于结束了每年一次的为期12个月的冬眠,醒来的第一件事就是——看电影!!nono发现最近一年出现了各种很好很强大的电影,例如这个.这个.还有这个. 于是nono直接把这些电影全部扔进了下载列表之中.已知nono下载了N部电影,其中第i部电影的大小为Si,该电影最大下载速度不会超过Vi,在任一时刻全部电影的下载速度之和不会超过Vt.现在nono希望知道在这些条件下至少需要多长时间才能将这些电影全部下完. Input 多组输入.每组输入的第一行为两个整数N,Vt(0<N≤106, 0<

暑假第一篇,linux学习初体验

在大二结束的小学期我学习了嵌入式编程andrino.智能小车和树莓派.树莓派用的就是类Unix语言,当时主要是学习了: ·简单的命令行命令和使用gcc编译c文件的各种带参数的方式. ·进程.线程.网络编程.FIFO管道的使用,并未深入了解原理. 学嵌入式主要是接线,加把c程序烧录到芯片中,通过逻辑来控制各口的电平,来显示操作的情况,或者是在PC端的串口中显示(有实验报告). 智能小车功能包括各种运动(前后左右停止),有温度.光照.距离的测试模块,有自动距离检测.如果小于一定数值会改变方向.还有红

GCC在C语言中内嵌汇编 asm __volatile__ 【转】

转自:http://blog.csdn.net/pbymw8iwm/article/details/8227839 在内嵌汇编中,可以将C语言表达式指定为汇编指令的操作数,而且不用去管如何将C语言表达式的值读入哪个寄存器,以及如何将计算结果写回C 变量,你只要告诉程序中C语言表达式与汇编指令操作数之间的对应关系即可, GCC会自动插入代码完成必要的操作. 1.简单的内嵌汇编 例: __asm__ __volatile__("hlt"); "__asm__"表示后面的

CentOS6.8下编译安装GCC

关于 GCC 在 CentOS 下通过 yum 安装默认版本号,CentOS 5 是 4.1.2:CentOS 6 是 4.4.7:CentOS 7 是 4.8.3.很多时候在编译安装软件都需要高版本的 GCC,否则就会报错.那么如何升级 GCC 的版本呢? 首先要确认升级到的 GCC 版本号.目前 GCC 的最新版已经到了 5.2,而 CentOS 7 则依然使用其 4.8,所以基于兼容性考虑,我选择升级到 4.8.5.GCC 官网:https://gcc.gnu.org 下面开始一步一步来编

暑假反思

成功的,又一门功课成功地成为了全班倒数,还是最能体现一个人编程水平的c++实训.又得好好反思一下自己的学习状态了. 刚来到华工时的那种不甘,让我近乎维持着高中的学习状态,课内成绩荣登榜首,ACM一直保持着努力状态,这时的我的代码能力可以说是超过了除了几个原本有底子的大多数人.自大一上打下良好的基础之后,一直维持“学霸”状态的我开始反思:我想成为什么样的人?我所热爱的到底是什么?并且开始打算大一下甚至花一年的时间来明确这个方向. 直到现在我都觉得那个时候的决策是正确的. 但是,从现在来看,我的寻找

1 C语言 gcc 介绍 C 语言编译 main接受参数

1         第一个c语言的hello world 1.1      include头文件包含 头文件包含,写法#include<文件名>, 1.2      main函数 这个就是C语言程序的入口,所有的C程序都是从main开始执行,一个C的源程序必须有一个main函数,也只能有一个main函数 1.3      注释 //注释一行 /* */代表块注释,可以注释多行代码 1.4      {}括号和代码块 代表一个代码单元 1.5      声明 C语言规定,所有的变量和函数必须先声

gcc基本用法

GCC基本用法 GCC最基本的用法是: gcc [option] filenames option:编译器所需要的编译选项 filenames:要编译的文件名 gcc编译流程 都以 hello.c 为例预处理: gcc –E hello.c –o hello.i编译: gcc –S hello.i –o hello.S汇编: gcc –C hello.S –o hello.o链接: gcc hello.o –o hello -O 优化 -O2 比-O更好的优化编译.链接.当然整个编译.链接过程会