博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
矩阵乘法快速幂 cojs 1717. 数学序列
阅读量:4617 次
发布时间:2019-06-09

本文共 2911 字,大约阅读时间需要 9 分钟。

矩阵乘法模板:

1 #define N 801 2 #include
3 using namespace std; 4 #include
5 int a[N][N],b[N][N],c[N][N]; 6 int n,m,p; 7 int read() 8 { 9 int ans=0,ff=1;char s;10 s=getchar();11 while(s<'0'||s>'9') 12 {13 if(s=='-') ff=-1;14 s=getchar();15 }16 while(s>='0'&&s<='9')17 {18 ans=ans*10+s-'0';19 s=getchar();20 }21 return ans*ff;22 } 23 int main()24 {25 n=read();26 p=read();27 m=read();28 for(int i=1;i<=n;++i)29 for(int j=1;j<=p;++j)30 a[i][j]=read();31 for(int i=1;i<=p;++i)32 for(int j=1;j<=m;++j)33 b[i][j]=read();34 for(int i=1;i<=n;++i)35 {36 for(int j=1;j<=m;++j)37 {38 c[i][j]=0;39 for(int k=1;k<=p;++k)40 c[i][j]+=a[i][k]*b[k][j];41 printf("%d ",c[i][j]);42 }43 printf("\n");44 }45 return 0;46 }

 

cojs 1717. 数学序列

★   输入文件:number1.in   输出文件:number1.out   简单对比

时间限制:1 s   内存限制:128 MB

【题目描述】

 

已知一个函数f :

f (1) =1

f (2) =1

f (n) = (a × f (n −1) +b × f (n − 2))mod 7

现给出a,b,n ,要你求出 f (n) .

 

【输入格式】

每一行输入一组数据分别为A,B,N(1<=A,B<=1000,1<=N<=200000000)

【输出格式】

每一行输出结果 f (n) .

【样例输入】

1 1 3

1 2 10

【样例输出】

25
1 #include
2 using namespace std; 3 #include
4 #include
5 #define N 5 6 #define mod 7 7 struct Jz{ 8 int line,cal; 9 int jz[N][N];10 }a,ans;11 int A,B;12 void pre_chuli()13 {14 a.cal=2;a.line=2;15 a.jz[1][1]=0;a.jz[1][2]=1;16 a.jz[2][1]=B;a.jz[2][2]=A;17 ans.cal=1;ans.line=2;18 ans.jz[1][1]=1;19 ans.jz[2][1]=1;20 }21 Jz matrax(Jz x,Jz y)22 {23 Jz sum;24 sum.line=x.line;sum.cal=y.cal;25 memset(sum.jz,0,sizeof(sum.jz));26 /* for(int i=1;i<=sum.line;++i)27 {28 for(int j=1;j<=sum.cal;++j)29 printf("%d ",sum.jz[i][j]);30 printf("\n");31 }*/32 for(int i=1;i<=sum.line;++i)33 for(int j=1;j<=sum.cal;++j)34 {35 for(int k=1;k<=x.cal;++k)36 {37 sum.jz[i][j]=(sum.jz[i][j]+x.jz[i][k]*y.jz[k][j])%mod;38 }39 }40 return sum;41 }42 int Fast_matrax(int n)43 {44 if(n==1) return ans.jz[2][1];45 n-=2;/*真正的乘法次数是n-2*/46 while(n)47 {48 if(n&1)49 {50 ans=matrax(a,ans);51 }52 n>>=1;53 a=matrax(a,a);54 }55 return ans.jz[2][1]%mod;56 }57 int main()58 {59 freopen("number1.in","r",stdin);60 freopen("number1.out","w",stdout);61 int n;62 while(scanf("%d%d%d",&A,&B,&n)==3)63 {64 memset(a.jz,0,sizeof(a.jz));65 a.cal=a.line=0;66 memset(ans.jz,0,sizeof(ans.jz));67 ans.cal=ans.line=0;68 pre_chuli();69 printf("%d\n",Fast_matrax(n));70 }71 fclose(stdin);fclose(stdout);72 return 0;73 }

 

转载于:https://www.cnblogs.com/c1299401227/p/5552197.html

你可能感兴趣的文章
connection string for Excel/Access 2010
查看>>
【转】【Python】Python中的__init__.py与模块导入(from import 找不到模块的问题)
查看>>
学习wavenet_vocoder之环境配置
查看>>
常用Maven命令
查看>>
Docker启动mysql的坑2
查看>>
j2ee爬坑行之二 servlet
查看>>
JAVA基础入门(JDK、eclipse下载安装)
查看>>
最基础的applet运用--在applet上画线
查看>>
并不对劲的hdu4777
查看>>
linux使用rz、sz快速上传、下载文件
查看>>
判断数字的正则表达式
查看>>
DOC常用命令(转)
查看>>
php写一个判断是否有cookie的脚本
查看>>
Mac配置Fiddler抓包工具
查看>>
转:Java并发集合
查看>>
Word截图PNG,并压缩图片大小
查看>>
Python项目对接CAS方案
查看>>
mysql产生随机数
查看>>
编程风格
查看>>
熟悉常用的Linux命令
查看>>