hdu 2256 Problem of Precision

简介: 点击打开hdu 2256 思路: 矩阵快速幂 分析: 1 题目要求的是(sqrt(2)+sqrt(3))^2n %1024向下取整的值     3 这里很多人会直接认为结果等于(an+bn*sqrt(6))%1024,但是这种结果...

点击打开hdu 2256

思路: 矩阵快速幂

分析:

1 题目要求的是(sqrt(2)+sqrt(3))^2n %1024向下取整的值

 

 

3 这里很多人会直接认为结果等于(an+bn*sqrt(6))%1024,但是这种结果是错的,因为这边涉及到了double,必然会有误差,所以根double有关的取模都是错误的思路


代码:

/************************************************
 * By: chenguolin                               * 
 * Date: 2013-08-23                             *
 * Address: http://blog.csdn.net/chenguolinblog *
 ***********************************************/
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;

const int MOD = 1024;
const int N = 2;

struct Matrix{
    int mat[N][N];
    Matrix operator*(const Matrix& m)const{
        Matrix tmp;
        for(int i = 0 ; i < N ; i++){
            for(int j = 0 ; j < N ; j++){
                tmp.mat[i][j] = 0;
                for(int k = 0 ; k < N ; k++){
                    tmp.mat[i][j] += mat[i][k]*m.mat[k][j]%MOD;
                    tmp.mat[i][j] %= MOD;
                }
            }
        }
        return tmp;
    }
};

int Pow(Matrix &m , int k){
    if(k == 1)
        return 9;
    k--;
    Matrix ans;
    memset(ans.mat , 0 , sizeof(ans.mat));
    for(int i = 0 ; i < N ; i++)
        ans.mat[i][i] = 1;
    while(k){
        if(k&1)
            ans = ans*m;
        k >>= 1;
        m = m*m;
    }
    int x = (ans.mat[0][0]*5+ans.mat[0][1]*2)%MOD;
    return (2*x-1)%MOD;
}

int main(){
    int cas , n;
    Matrix m;
    scanf("%d" , &cas);
    while(cas--){
        scanf("%d" , &n); 
        m.mat[0][0] = 5 ; m.mat[1][1] = 5;
        m.mat[1][0] = 2 ; m.mat[0][1] = 12;
        printf("%d\n" , Pow(m , n));
    }
}




目录
相关文章
|
自然语言处理
CMake基础(3)静态库
CMake基础(3)静态库
230 1
|
分布式数据库 Hbase
HBase sequenceId知识点略记
在HBase中,sequenceId是实现一致性的灵魂,这里的一致性有两方面意思: 顺序性,即先写的先被读到,未提交的写不能被读到; 完整性,包含如下几点; 未持久化到hfile的数据,对应的wal文件不能删除 如果由于wal文件过多需要清理,则需要先把对应的数据持久化 异常恢复过程中,需要.
1934 0
|
Rust 算法 安全
【密码学】一文读懂HMAC
本文将来聊一聊基于哈希函数的消息认证码,在此之前,先来科普一下什么是 「消息认证码」 (MAC), 先来看一个简单的栗子
2283 0
【密码学】一文读懂HMAC
|
12月前
|
运维 安全 Devops
DevOps实践中的安全审核和合规性
在DevOps实践中,确保安全审核和合规性至关重要。通过自动化合规审查、持续安全集成、基础设施即代码管理、敏捷合规框架、跨部门合作、教育与培训、实施DevSecOps模型、使用安全编码技术、整合正确工具及采用安全即代码等措施,组织能有效管理并降低合规与安全风险,促进高效可靠的DevOps文化发展。
|
边缘计算 运维 监控
|
存储 监控 前端开发
OpenStack组件Horizon
【8月更文挑战第20天】
410 4
|
存储 Java Linux
Linux环境变量配置及常见问题解决方案
Linux环境变量配置及常见问题解决方案
|
存储 SQL 算法
【Hive】ORC、Parquet等列式存储的优点
【4月更文挑战第14天】【Hive】ORC、Parquet等列式存储的优点
|
存储 安全 架构师
内存泄漏专题(9)内存池陷阱
内存泄漏专题(9)内存池陷阱
188 0
|
消息中间件 API 数据库
详解分布式微服务架构
详解分布式微服务架构