2314 数学作业

2011年省队选拔赛湖南

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 大师 Master
 
 
题目描述 Description

小 C 数学成绩优异,于是老师给小 C 留了一道非常难的数学作业题: 给定正整数 N 和 M ,要求计算 Concatenate (1 .. N ) Mod M 的值,其中Concatenate (1 .. N ) 是将所有正整数 1, 2, …, N 顺序连接起来得到的数。例如, N = 13, Concatenate (1 .. N ) = 12345678910111213. 小 C 想了大半天终于意识到这是一道不可能手算出来的题目,于是他只好向你求助,希望 你能编写一个程序帮他解决这个问题。

输入描述 Input Description

只有一行 为用空格隔开的两个正整数 N 和 M

输出描述 Output Description

仅包含一个非负整数,表示 Concatenate (1 .. N ) Mod M 的值

样例输入 Sample Input

13 13

样例输出 Sample Output

4

数据范围及提示 Data Size & Hint

其中 30%的数据满足1≤ N ≤1000000;100%的数据满足1≤ N ≤1018且1≤ M ≤109

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef int matrix[][];
typedef long long ll;
ll N;
int MOD;
matrix mat,Q,tmp;
void Init_matrix(){
memset(mat,,sizeof(mat));
mat[][]=mat[][]=mat[][]=mat[][]=mat[][]=;
memset(Q,,sizeof(Q));
for(int i=;i<;i++)Q[i][i]=;
}
void Mul(matrix &a,matrix &b){
memset(tmp,,sizeof(tmp));
for(int i=;i<;i++)
for(int k=;k<;k++)
for(int j=;j<;j++)
if((tmp[i][j]+=ll(a[i][k])*b[k][j]%MOD)>=MOD)
tmp[i][j]-=MOD;
memcpy(a,tmp,sizeof(a));
}
void Power(matrix &a,matrix &b,ll k){
while(k){if(k&)Mul(a,b);k>>=;Mul(b,b);}
}
int main(){
scanf("%lld%d",&N,&MOD);
int len=,B=,C=;
ll p=;
for(ll t=N;t;t/=,len++);
for(int i=;i<len;i++){
Init_matrix();
mat[][]=(p=p*)%MOD;
Power(Q,mat,p-p/);
B=(ll(B)*Q[][]%MOD+ll(C)*Q[][]%MOD+Q[][])%MOD;
C=((p%MOD)-+MOD)%MOD;
}
Init_matrix();
mat[][]=p*%MOD;
Power(Q,mat,N-p+);
B=(ll(B)*Q[][]%MOD+ll(C)*Q[][]%MOD+Q[][])%MOD;
printf("%d\n",B);
return ;
}

最新文章

  1. 通过cmd完成FTP上传文件操作
  2. 7. LAMP环境搭建
  3. 【前端】require函数实现原理
  4. POJ1849Two[DP|树的直径](扩展HDU4003待办)
  5. Spire.Doc组件读取与写入Word
  6. java 企业网站源码模版 有前后台 springmvc SSM 生成静态化
  7. 042 spring boot在启动之后,自动关闭
  8. json文件读写函数
  9. java web 的 几种跨域方式
  10. Vue2 第三天学习
  11. pycharm 取消 rebase 操作
  12. Python模块简介及安装 [numpy,pandas,matplotlib,scipy,statsmodels,Gensim,sklearn,keras]
  13. Silverlight 预定义颜色速查表
  14. Service Intent must be explicit的解决方法
  15. STL--heap概述:make_heap,sort_heap,pop_heap,push_heap
  16. AutoHotKey 快速入门
  17. 笔记-scrapy与twisted
  18. ubuntu下eclipse c++开发
  19. [暑假集训--数论]poj2115 C Looooops
  20. LeetCode(95) Unique Binary Search Trees II

热门文章

  1. 创建spring管理的自定义注解
  2. Java7、Java8 安装卸载问题
  3. vi中如何替换某字符成“回车”?
  4. PAT 乙级 1085. PAT单位排行 (25) 【结构体排序】
  5. 调用微信接口token的问题
  6. ubuntu mysql 配置(远程访问&amp;&amp;字符集设置&amp;&amp;忽略大小写)
  7. Could not find JSON in http://updates.jenkins-ci.org/update-center.json?id=default&amp;version=2.7.4
  8. win10系统使用clover时程序崩溃的解决
  9. listen 60
  10. codeforces 558C C. Amr and Chemistry(bfs)