HDU4565 && 2013年长沙邀请赛A题
amp 2013 长沙
2023-09-27 14:23:51 时间
部分转自http://blog.csdn.net/crazy______/article/details/9021169
#include<cstdio> using namespace std; __int64 A[3][3],s[3][3],tmp[3][3]; void fun(__int64 n,__int64 m) { __int64 i,j,k; for(i=1;i<=2;i++) for(j=1;j<=2;j++) { s[i][j]=A[i][j]; } --n; while(n) { if(n&1) { for(i=1;i<=2;i++) for(j=1;j<=2;j++) { tmp[i][j]=A[i][j]; A[i][j]=0; } for(i=1;i<=2;i++) for(j=1;j<=2;j++) for(k=1;k<=2;k++) { A[i][j]=((A[i][j]+tmp[i][k]*s[k][j])%m+m)%m; } } for(i=1;i<=2;i++) for(j=1;j<=2;j++) { tmp[i][j]=s[i][j]; s[i][j]=0; } for(i=1;i<=2;i++) for(j=1;j<=2;j++) for(k=1;k<=2;k++) { s[i][j]=((s[i][j]+tmp[i][k]*tmp[k][j])%m+m)%m; } n>>=1; } } int main() { __int64 a,b,n,m; __int64 i,j; while(scanf("%I64d%I64d%I64d%I64d",&a,&b,&n,&m)==4) { if(n==1) { printf("%I64d\n",2*a%m); continue; } A[1][1]=2*a; A[1][2]=b-a*a; A[2][1]=1; A[2][2]=0; fun(n-1,m); printf("%I64d\n",((A[1][1]*2*a+A[1][2]*2)%m+m)%m); } return 0; }
相关文章
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第10章节--SP2013中OAuth概览 应用程序验证
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第1章节--SharePoint 2013 介绍 SharePoint 2013 平台
- BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第13章节--使用业务连接服务创建业务线解决方式 创建启用BCS的业务解决方式
- Java多线程之生产者消费者问题<一>:使用synchronized keyword解决生产者消费者问题
- Nginx学习笔记(五) 源码分析&内存模块&内存对齐
- 10000+字带你理解Linux常用的文件操作命令&Linux文件系统/目录介绍
- go test test & benchmark
- React下reducer中处理数组&&对象的赋值改动
- 快速傅里叶变换FFT& 数论变换NTT
- 【排序算法(二)】选择排序(直接选择排序&&堆排序)
- AT&T:开源是打赢竞争的最佳方式
- C++ 基础入门 之 算数运算符+-x/%++/赋值运算符=/比较运算符><=/逻辑运算符!&&||
- C++基础学习教程(七)----类编写及类的两个特性解析--->多态&继承