快速幂形式

public static int f(int a,int b,int c){
int ans =1;
int base=a;
while(b!=0){
if((b&1)!=0)
ans=(ans*base)%c;
base=(base*base)%c;
}
return ans;
}

快速乘法幂(优化)

幂转换成乘法,乘法转化成加法

 public static int f(int a,int b,int c){
int ans = 0;
int base=a;
while(b!=0){
if((b&1)!=0)
ans=(ans+base)%c;
base=(base+base)%c;
b>>=1;
}
return ans;
}
public static int f1(int a,int b,int c){
int ans =1;
int base = a;
while(b!=0){
if((b&1)!=0)
ans= f(ans, base, c);
base=f(base, base, c);
b>>=1;
}
return ans;
}

矩阵快速幂

将快速幂里边的1换成一个单位矩阵,然后利用矩阵相乘。

public static long[][] mut(int k,int n,long[][]A){
long [][]res = new long[n][n];
for(int i=0;i<res.length;i++)
res[i][i]=1;
while(k!=0){
if((k&1)!=0)
res=f(res,A);
A=f(A,A);
k>>=1;
}
return res;
}
public static long[][] f(long[][]A,long[][] B){
long res[][]=new long[A.length][B.length];
for(int i=0;i<res.length;i++)
for(int j=0;j<res[0].length;j++){
for(int k=0;k<B.length;k++){
res[i][j]+=A[i][k]*B[k][j];
}
}
return res;
}

例题:蓝桥杯 --加强的斐波那契

斐波那契数列大家都非常熟悉。它的定义是:

  f(x)  =  1  ....  (x=1,2) 
  f(x)  =  f(x-1)  +  f(x-2)  ....  (x> 2)

  对于给定的整数  n  和  m,我们希望求出: 
  f(1)  +  f(2)  +  ...  +  f(n)  的值。但这个值可能非常大,所以我们把它对  f(m)  取模。

import java.util.*;

public class Main8 {   //基本上是按模板写的

    public static long[][] mut(int k,int n,long[][]A){
long [][]res = new long[n][n];
res[1][1]=1;
res[1][0]=0;
res[0][1]=0;
res[0][0]=1;
while(k!=0){
if((k&1)!=0)
res=f(res,A);
A=f(A,A);
k>>=1;
}
return res;
}
public static long[][] f(long[][]A,long[][] B){
long res[][]=new long[A.length][B.length];
for(int i=0;i<res.length;i++)
for(int j=0;j<res[0].length;j++){
for(int k=0;k<B.length;k++){
res[i][j]+=A[i][k]*B[k][j];
}
}
return res;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
long a[][]=new long [2][2];
a[0][0]=1;
a[1][1]=0;
a[0][1]=1;
a[1][0]=1;
long d[][]=mut(n-1,2,a );
System.out.println(d[0][0]%1000000009); }
}

快速幂 ,快速幂优化,矩形快速幂(java)的更多相关文章

  1. 【板子】gcd、exgcd、乘法逆元、快速幂、快速乘、筛素数、快速求逆元、组合数

    1.gcd int gcd(int a,int b){ return b?gcd(b,a%b):a; } 2.扩展gcd )extend great common divisor ll exgcd(l ...

  2. Luogu 3390 【模板】矩阵快速幂 (矩阵乘法,快速幂)

    Luogu 3390 [模板]矩阵快速幂 (矩阵乘法,快速幂) Description 给定n*n的矩阵A,求A^k Input 第一行,n,k 第2至n+1行,每行n个数,第i+1行第j个数表示矩阵 ...

  3. 「干货」面试官问我如何快速搜索10万个矩形?——我说RBush

    「干货」面试官问我如何快速搜索10万个矩形?--我说RBUSH 前言 亲爱的coder们,我又来了,一个喜欢图形的程序员‍,前几篇文章一直都在教大家怎么画地图.画折线图.画烟花,难道图形就是这样嘛,当 ...

  4. 微信快速开发框架(六)-- 微信快速开发框架(WXPP QuickFramework)V2.0版本上线--源码已更新至github

    4月28日,已增加多媒体上传及下载API,对应MediaUploadRequest和MediaGetRequest ------------------------------------------ ...

  5. 怎么关闭win10快速访问功能?关闭Windows10系统快速访问方法

    怎么关闭win10快速访问功能?关闭Windows10系统快速访问方法 Windows10系统的"快速访问"功能很容易泄露电脑中的隐私,用什么方法可以让这个功能消失,避免电脑的个人 ...

  6. ASP.NET Core模块化前后端分离快速开发框架介绍之2、快速创建一个业务模块

    源码地址 GitHub:https://github.com/iamoldli/NetModular 演示地址 地址:https://nm.iamoldli.com 账户:admin 密码:admin ...

  7. Serverless 初体验:快速开发与部署一个Hello World(Java版)

    昨天被阿里云的这个酷炫大屏吸引了! 我等85后开发者居然这么少!挺好奇到底什么鬼东西都是90.95后在玩?就深入看了一下. 这是一个关于Serverless的体验活动,Serverless在国内一直都 ...

  8. poj 3735 Training little cats 矩阵快速幂+稀疏矩阵乘法优化

    题目链接 题意:有n个猫,开始的时候每个猫都没有坚果,进行k次操作,g x表示给第x个猫一个坚果,e x表示第x个猫吃掉所有坚果,s x y表示第x个猫和第y个猫交换所有坚果,将k次操作重复进行m轮, ...

  9. POJ 3735 Training little cats<矩阵快速幂/稀疏矩阵的优化>

    Training little cats Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 13488   Accepted:  ...

随机推荐

  1. Python爬虫之12306-买票器小白源码

    研究不易 import requests import re import urllib.parse import json import datetime from collections impo ...

  2. python&django 实现页面中关联查询小功能(基础篇)

    效果 实现效果图如下,根据过滤条件查询相关信息. 知识点 1.配置URL,在路由中使用正则表达式 2.过滤查询 代码 setting.py from django.contrib import adm ...

  3. dubbo直连提供者 & 只订阅 & 只注册

    1.    dubbo直连提供者 在开发及测试环境下,经常需要绕过注册中心,只测试指定服务提供者,这时候可能需要点对点直连,点对点直连方式,将以服务接口为单位,忽略注册中心的提供者列表,A 接口配置点 ...

  4. 【转】pyhton之Reportlab模块——生成pdf文件

    [转]pyhton之Reportlab模块 reportlab模块是用python语言生成pdf文件的模块 安装:pip install reportlab 模块默认不支持中文,如果使用中文需要注册 ...

  5. mac配置go使用gopm下载第三方包

    打开zshrc文件 vim ~/.zshrc 输入变量 export GOPATH="/Users/chennan/go" #这个自定义 export GOBIN=$GOPATH/ ...

  6. python笔记01-05

    作者:Vamei 出处:http://www.cnblogs.com/vamei https://blog.csdn.net/flyfrommath/article/details/77447587 ...

  7. oracle,mysql,sql server三大数据库的事务隔离级别查看方法

    1:mysql的事务隔离级别查看方法 mysql 最简单,执行这条语句就行:select @@tx_isolation  详情: 1.查看当前会话隔离级别 select @@tx_isolation; ...

  8. Lesson 2-1 (数据结构,序列通用的操作)

    2.0 数据结构 --- 数据结构是以某种方式组合起来的数据元素集合. --- python的常见的数据结构 2.1 序列(sequence) --- 序列中的每个元素都有编号,即索引(也称为下标). ...

  9. python的pandas库学习笔记

    导入: import pandas as pd from pandas import Series,DataFrame 1.两个主要数据结构:Series和DataFrame (1)Series是一种 ...

  10. Mybatis自定义分布式二级缓存实现与遇到的一些问题解决方案!

    先说两句: 我们都知道Mybatis缓存分两类: 一级缓存(同一个Session会话内) & 二级缓存(基于HashMap实现的以 namespace为范围的缓存) 今天呢, 我们不谈一级缓存 ...