【UVA10655】 Contemplation! Algebra

题目

给定 \(p = a + b\) 和 \(q = ab\) 和 \(n\),求 \(a ^ n + b ^ n\)。

$0\le n\lt 2^{63} $

分析

大水题。

先考虑 \(n\) 较小的情况,可以很容易的想到递推:
\[
\begin{array}{}
\text{令} F(i) & = a ^ n + b ^ n \ & = (a + b)(a ^ {n - 1} + b ^ {n - 1}) - (ab ^ {n - 1} + a^{n - 1}b) \ & = (a + b)(a ^ {n - 1} + b ^ {n - 1}) - ab(a ^ {n - 2} + b ^ {n - 2}) \ & = p \times F(i - 1) - q \times F(i - 2)
\end{array}
\]
然后发现这个递推式可以用矩阵优化:
\[
\left[\begin{matrix}
p & - q \ 1 & 0
\end{matrix}\right]
\times
\left[\begin{matrix}
F[i] \ F[i - 1]
\end{matrix}\right] =
\left[\begin{matrix}
F[i] \times p & + & F[i - 1]\times (-q) \ F[i] \times 1 & + & F[i - 1]\times 0
\end{matrix}\right] =
\left[\begin{matrix}
F[i + 1] \ F[i]
\end{matrix}\right]
\]
即:
\[
\left[\begin{matrix}
p & - q \ 1 & 0
\end{matrix}\right]^n
\times
\left[\begin{matrix}
F[1] \ F[0]
\end{matrix}\right] =
\left[\begin{matrix}
F[n + 1] \ F[n]
\end{matrix}\right]
\]
显然,\(F[1] = p,\ F[0] = 2\)。

代码

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int MAXN = 10;

struct matrix {
    ll a[MAXN][MAXN]; int rowSize, lineSize;

    matrix(int x, int y) {
        rowSize = x; lineSize = y;
    }

    ll *operator [](const unsigned &i) {return a[i];}

    matrix operator *(matrix y) {
        matrix ans(rowSize, y.lineSize);
        for(int i = 0; i < ans.rowSize; i++)
            for(int j = 0; j < ans.lineSize; j++) {
                ans[i][j] = 0;
                for(int k = 0; k < lineSize; k++)
                    ans[i][j] += a[i][k] * y[k][j];
            }
        return ans;
    }
} u(2, 2);

matrix qPow(matrix x, ll b) {
    matrix ans = u, base = x;
    while(b) {
        if(b & 1)
            ans = ans * base;
        base = base * base;
        b >>= 1;
    }
    return ans;
}

int main() {
    ios::sync_with_stdio(false);
    u[0][0] = 1; u[0][1] = 0;
    u[1][0] = 0; u[1][1] = 1;
    ll p, q, n;
    while(scanf("%lld%lld%lld", &p, &q, &n) == 3) {
        matrix a(2, 2), b(2, 2), st(2, 1);
        a[0][0] = p; a[0][1] = -q;
        a[1][0] = 1; a[1][1] = 0;
        st[0][0] = p; st[1][0] = 2;
        b = qPow(a, n) * st;
        printf("%lld\n", b[1][0]);
    }
    return 0;
}

UVA10655 Contemplation! Algebra

原文地址:https://www.cnblogs.com/zhylj/p/9931671.html

时间: 2024-10-01 02:51:02

【UVA10655】 Contemplation! Algebra的相关文章

Contemplation! Algebra(矩阵快速幂,uva10655)

Problem EContemplation! AlgebraInput: Standard Input Output: Standard Output Time Limit: 1 Second Given the value of a+b and ab you will have to find the value of an+bn Input The input file contains several lines of inputs. Each line except the last

【原创】开源Math.NET基础数学类库使用(四)C#解析Matrix Marke数据格式

开源Math.NET系列文章目录: 1.开源.NET基础数学计算组件Math.NET(一)综合介绍  2.开源.NET基础数学计算组件Math.NET(二)矩阵向量计算  3.开源.NET基础数学计算组件Math.NET(三)C#解析Matlab的mat格式 4.开源.NET基础数学类库使用Math.NET(四)C#解析Matrix Marke数据格式 5.开源.NET基础数学类库使用Math.NET(五)C#解析Delimited Formats数据格式 6.开源.NET基础数学类库使用Mat

【分享】近4000份数学学习资源免费分享给大家

一直以来喜欢收集数学类的教程资源,于是费了好大劲从万千合集站上扒拉了下来,总结归类了一下,一共有将近4000本电子书.经测试,均可免费下载,可能会弹出小广告,可不必理会之.[仅供学术学习和交流,请无用于商业用途.]另外,如有可能,还请尽量支持正版纸质书.   数学史(54)     数学史.rar 55.6 MB   数学的起源与发展.rar 4.3 MB   费马大定理—一个困惑了世间智者358年的谜.pdf 9.5 MB   通俗数学名著译丛14-无穷之旅:关于无穷大的文化史.pdf 14.

SCI&amp;EI 英文PAPER投稿经验【转】

英文投稿的一点经验[转载] From: http://chl033.woku.com/article/2893317.html 1. 首先一定要注意杂志的发表范围, 超出范围的千万别投,要不就是浪费时间;另外,每个杂志都有他们的具体格式要求,一定要按照他们的要求把论文写好,免得浪费时间,前些时候,我的一个同事向一个著名的英文杂志投稿,由于格式问题,人家过两个星期就退回来了,而且说了很多难听的话,说投稿前首先就应该看清楚他们的格式要求:2. 论文写作一定要言简意赅,特别是摘要,引言和结论部分,特别

【原创】开源Math.NET基础数学类库使用(一)综合介绍

你还可以参考本博客其他.NET开源项目的相关文章: [原创]彩票预测算法:离散型马尔可夫链模型          Newlife XCode组件资源目录汇总[2013年版] [原创]开源.NET下的XML数据库介绍及入门          [原创].NET开源压缩组件介绍与入门 [开源].NET开源表达式计算组件介绍与使用          [原创]开源Word读写组件DocX介绍与入门 [原创]Matlab.NET混编调用Figure窗体                [原创]Matlab与.

公开课可下载资源汇总【转】

微博上经常有同学分享一些公开课资源,包括可下载的网盘资源,课件资源等等,但是时间长了就忘了在哪里了.另外Coursera官方也推荐一些第三方批量下载工具,大家下载课程后也可以考虑共享到网盘里,减轻Coursera官方的下载压力.这里计划做一个汇总,包括一些佚名的来自网络上的课程资源分享,也欢迎大家提供线索或者补充公开课网盘资源. 1.Coursera上Andrew Ng老师的”机器学习公开课(Machine Learning)” 通过在Google上“site:pan.baidu.com 机器学

【线性代数】 01 - 古老的新学科

线性代数(Linear Algebra)这门学科大家并不陌生,如果有人还是觉得有点生疏,那么“行列式”.“矩阵”这些概念你总该还有印象.大学各个专业都会深浅不同地学习这门课,文科一般放在<大学数学>里,工科生一般在<线性代数>或<高等数学>中见到它,而我们数学系更多地是上<高等代数>这门课.线性代数之所以能同微积分一同挤进大学数学,就在于它模型的简单性和应用的广泛性.它不光是数学研究的一个基本工具,还是很多工商业学科的理论基础. 但有意思的是,线性代数成为一

[转]机器学习和深度学习资料汇总【01】

本文转自:http://blog.csdn.net/sinat_34707539/article/details/52105681 <Brief History of Machine Learning> 介绍:这是一篇介绍机器学习历史的文章,介绍很全面,从感知机.神经网络.决策树.SVM.Adaboost到随机森林.Deep Learning. <Deep Learning in Neural Networks: An Overview> 介绍:这是瑞士人工智能实验室Jurgen

【转载】实时嵌入式软件开发的25个常见错误

原文地址:http://blog.csdn.net/myaccella/article/details/7003308 英文原文由David B. Stewart撰写,  这篇论文对实时嵌入式软件开发的易犯错误做了深入分析,对我们的开发非常有指导意义. David B. Stewart Software Engineering for Real-Time Systems Laboratory Department of Electrical and Computer Engineering an